这是function.prototype.bind()-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind的MDN说明的链接。
我添加了一些console.logs以帮助我了解发生了什么。
var module = {
x: 42,
getX: function() {
return this.x;
}
};
var boundGetX = module.getX.bind(module);
console.log(boundGetX());
console.log(boundGetX().x);
console.log(boundGetX.x);
第一个console.log返回
42
这对我来说很有意义。
但是,第二个和第三个console.logs返回
undefined
这是为什么?函数如何能够查看和记录存储值为42的模块属性x,而x的
boundGetX
值未定义?使用bind函数后,
boundGetX
现在不是指向module.getX
并且'this'变量指向模块吗?为什么
boundGetX.x
不能指向module.x
?当未定义module.x
时,如何成功记录boundGetX.x
的值? 最佳答案
您打电话的时候:
console.log(boundGetX().x);
您实际上是在打电话:
this.x.x
实际在做什么:
(42).x // there's no property x on the number 42
而且由于属性
x
上没有属性x
,因此它是undefined
。