bind函数如何以及何时起作用?

时间:2015-07-09 03:46:40

标签: javascript

我在bind方法

尝试使用此代码http://javascriptissexy.com/javascript-apply-call-and-bind-methods-are-essential-for-javascript-professionals/
var data = [
    {name:"Samantha", age:12},
    {name:"Alexis", age:14}
]

var user = {
    // local data variable​
    data    :[
        {name:"T. Woods", age:37},
        {name:"P. Mickelson", age:43}
    ],
    showData:function (event) {
        var randomNum = ((Math.random () * 2 | 0) + 1) - 1; // random number between 0 and 1​

        console.log (this.data[randomNum].name + " " + this.data[randomNum].age);
    }

}

// Assign the showData method of the user object to a variable​
var showDataVar = user.showData.bind(user);

showDataVar (); // // P. Mickelson 43​ (from the local data array)

据我所知,bind方法可用于更改函数内this引用的内容。

但是,如果我将此行var showDataVar = user.showData.bind(user);更改为两行

var showDataVar = user.showData;
showDataVar.bind(user);

先前的行为恢复(即代码打印 Samantha ),好像第二行没有任何效果。你能解释bind的工作原理吗?

1 个答案:

答案 0 :(得分:1)

bind不修改函数,它返回一个新函数。因此,showDataVar.bind(user)不执行任何操作,除非您保留结果并使用它。

关于bind如何运作,它与此基本相同:

Function.prototype.fakeBind = function(obj) {
  var that = this;
  return function() {
    return that.apply(obj, arguments);
  }
};