.call() 與 .apply() 存在的意義及區別
阿新 • • 發佈:2018-12-26
首先說明兩個方法的含義:
- apply:呼叫一個物件的一個方法,用另一個物件替換當前物件。例如:B.apply(A, arguments);即A物件應用B物件的方法。
- call:呼叫一個物件的一個方法,用另一個物件替換當前物件。例如:B.call(A, args1,args2);即A物件呼叫B物件的方法。
call 與 apply 的相同點:
- 方法的含義是一樣的,即方法功能是一樣的;
- 第一個引數的作用是一樣的;
call 與 apply 的不同點:兩者傳入的列表形式不一樣
- call可以傳入多個引數;
- apply只能傳入兩個引數,所以其第二個引數往往是作為陣列形式傳入
存在的意義:實現(多重)繼承
詳情請看大神的詳解: 點選開啟連結
插入兩段程式碼,大家練練手:
var scopeTest = (function(){ //考察了 this 的含義
window.a=2;
function fn(b){
this.b = b;
console.log(this.a);
}
var obj = {a:4,fn:fn};
fn();
obj.fn();
fn.call(obj);fn.call(null);
fn.apply(obj);fn.apply(null);
var fninstance = new fn(8);
console.log(fninstance.b);
})();
function fruits() {} fruits.prototype = { color:"red", say: function() {console.log(this.color);} } var apple = new fruits(); apple.say(); var banana = {color:"yellow"}; apple.say.call(banana); apple.say.apply(banana);