var name = 'The Window';
var object = {
name: 'My Object',
getNameFunc: function(){
return function() {
return this.name;
};
}
};
console.log( object.getNameFunc()() );
当我测试代码时。结果就是《窗户》。但我觉得this.name;
应该My Object
。我的想法怎么了。
当我在之前添加 var 时name : "My Object",
它显示一个错误。?为什么?
this
函数内部是调用它的“接收者”。
That is,
对于构造x.f()
, this
在函数内部(f
)将评估为x
.
对于所有其他情况,this
将评估为window
在被调用的函数内部。(功能call
, apply
, and bind
也可以改变this
...但那是另一个故事了。)
在发布的示例中,第二个函数(带有this.name
) is not使用调用x.f()
形式等this
is the window
object.
“简单的修复”是使用闭包:(第一个函数is中调用了x.f()
形式并因此this
是相同的object
,这符合预期。我们捕捉的价值this
在当前范围内通过创建的闭包self
以及返回的函数。)
getNameFunc : function () {
var self = this
return function () {
return self.name
}
}
不过,我可能会考虑另一种设计,具体取决于:)
快乐编码。
补充说明,供评论:
...那是因为你正在使用circle.getArea()
其形式为x.f()
. Thus this
getArea 函数内部的计算结果为circle
.
在发布的代码中您正在调用两个不同的功能连续。想象一下这样编写代码:
var nameFunc = object.getNameFunc()
nameFunc()
第一个函数调用的形式为x.f()
因此this
getNameFunc 内部是对object
。然而,在第二行中,函数 (nameFunc) 是not以形式调用x.f()
。因此,this
nameFunc 内部(从 getNameFunc 返回的函数)将计算为window
,如上所述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)