我在bind
方法
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
的工作原理吗?
答案 0 :(得分:1)
bind
不修改函数,它返回一个新函数。因此,showDataVar.bind(user)
不执行任何操作,除非您保留结果并使用它。
关于bind
如何运作,它与此基本相同:
Function.prototype.fakeBind = function(obj) {
var that = this;
return function() {
return that.apply(obj, arguments);
}
};