call() 和 apply() 的作用以及區別

call() 和 apply() 是預定義的函數方法。
它們作用一樣——改變上下文,即this的指向。只是使用方式不同。

語法:
foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments)
== this.foo(arg1, arg2, arg3);

apply方法——能劫持另外一個對象的方法,繼承另外一個對象的屬性.

Function.apply(obj,args)方法能接收兩個參數,實現將函數作爲另外一個對象的方法運行
obj:這個對象將代替Function類裏this對象
args:這個是數組,它將作爲參數傳給Function(args–>arguments)

call方法——與apply的作用相同,只不過是參數列表不一樣.

Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:這個對象將代替Function類裏this對象
params:這個是一個參數列表

第一個參數傳入的都是對象,區別在於第二個參數。

function A(){
     this.flag = 'A';
     this.tip = function(){
         alert(this.flag);
     };
}
function B(){
    this.flag = 'B';
}
var a = new A();
var b = new B();
//a.tip.call(b);
a.tip.apply(b);//彈出'B'

call 和 apply 都可以讓B對象調用A對象的tip方法,並且修改了this的當前作用對象.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章