js中的call和apply方法的區別

1、call和apply的說明app

一、call,apply都屬於Function.prototype的一個方法,它是JavaScript引擎內在實現的,由於屬於Function.prototype,因此每一個Function對象實例(就是每一個方法)都有call,apply屬性。既然做爲方法的屬性,那它們的使用就固然是針對方法的了,這兩個方法是容易混淆的,由於它們的做用同樣,只是使用方式不一樣。函數

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

三、相同點:兩個方法產生的做用是徹底同樣的。spa

四、不一樣點:方法傳遞的參數不一樣。prototype

2、實例代碼code

function A(){
    this.flag = 'A';
    this.tip = function(){
        console.log(this.flag);
    };
}
function B(){
    this.flag = 'B';
}
var a = new A();
var b = new B();

a.tip.call(b);//B
a.tip.apply(b);//B

代碼解釋(即說明apply和call做用)對象

一、實例代碼定義了兩個函數A和B,A中包含flag屬性和tip屬性(這個屬性賦值一個函數),B中有一個flag屬性。blog

二、分別建立A和B的對象a和b。ip

三、不管是a.tip.call(b);和a.tip.apply(b);運行的結果都是彈出B。io

四、從結果中能夠看出call和apply均可以讓B對象調用A對象的tip方法,而且修改了this的當前做用對象。

相關文章
相關標籤/搜索