1. 程式人生 > >.call() 與 .apply() 存在的意義及區別

.call() 與 .apply() 存在的意義及區別

首先說明兩個方法的含義:

  • 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);