有好一段時間我對於 call 以及 apply 總是一知半解. 不但不知道何時可以用到他也分不清楚兩者有什模差異.
基本上 call 以及 apply 都是去執行這個 function 並將這個 function 的 context 替換成第一個參數帶入的物件. 兩個主要的不同是 call 必須將 function 的參數一一帶入而用 apply 的話只要在第二個參數帶入一個陣列就可以了.
function fn( arg1, arg2,... ){
// do something
}
fn( arg1, arg2,... );
fn.call( context, arg1, arg2,... );
fn.apply( context, [ arg1, arg2,... ]);
第二個參數不是必須的
一個比較趨近現實使用方式的案例
Ajax 是一個很適合拿來用 call 以及 apply 的地方.
function Album( id, title, owner_id ){
this.id = id;
this.name = title;
this.owner_id = owner_id;
};
Album.prototype.get_owner = function( callback ){
var self = this;
$.get( '/owners/' + this.owner_id , function( data ){
callback && callback.call( self, data.name );
});
};
var album = new Album( 1, 'node.js conf', 2 );
album.get_owner( function( owner ){
alert( 'The album' + this.name + ' belongs to ' + owner );
});
速度
用 call 來執行的 function 稍稍微比用 apply 快一些. 但是別擔心, 基本上你是感覺不出來差異性的. 所以就挑你看的順眼的用吧.




