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的當前做用對象。