这是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

09-25 20:11