天天看點

JavaScript 中 call()、apply()、bind() 的用法

"use strict";
var name = '小王',age=10;
var obj = {
    name:'小李',
    age:20,
    getInfo(from, to) {
        console.log(arguments)
        console.log(this.name + '的年齡是' + this.age + '來自:' + from + ' 去:' + to);
    }
};

var db = {name:'大村',age:96};

obj.getInfo.call(db,'北京','南京');
obj.getInfo.apply(db,['内蒙古','新疆','别墅']);
obj.getInfo.bind(db,'上海','天津')();      
JavaScript 中 call()、apply()、bind() 的用法

以上出了 bind 方法後面多了個 () 外 ,結果傳回都一緻!

由此得出結論,bind 傳回的是一個新的函數,你必須調用它才會被執行。

微妙的差距!

從上面四個結果不難看出:

call 、bind 、 apply 這三個函數的第一個參數都是 this 的指向對象,第二個參數差别就來了:

call 的參數是直接放進去的,第二第三第 n 個參數全都用逗号分隔,直接放到後面 obj.myFun.call(db,'成都', ... ,'string' )。

apply 的所有參數都必須放在一個數組裡面傳進去 obj.myFun.apply(db,['成都', ..., 'string' ])。

bind 除了傳回是函數以外,它 的參數和 call 一樣。

當然,三者的參數不限定是 string 類型,允許是各種類型,包括函數 、 object 等等!

佛語:我本求心不求佛,了知三界空無物,若欲求佛但求心,隻這心心心是佛