我有这段代码:
function F() {
function C() {
return this;
}
return C();
}
var o = new F();
有人可以解释为什么this
在创建对象function C
时引用全局对象而不是o
?也许这种情况正在发生,因为在创建新对象o
时,会唤起现在C
属于全局对象的函数this
?
答案 0 :(得分:2)
您永远不会将C()设置为F()的成员,因此C()只是一个全局函数。我通过创建C()作为F()的子代来实现它:
function F() {
this.C = function() {
return this;
}
return this.C();
}
var o = new F();
答案 1 :(得分:1)
它基本上归结为构建函数与否。执行new F()
时,您正在构建一个新的函数对象,您可以使用this
来引用自身。只需尝试即可获得相同的结果:
function F() {
return this
}
var o = F();
执行此操作只会返回全局窗口对象,因为未构造F()
。为了获得你期望的结果,你可以做@ChrisGimas建议的,它将保留外部构造函数的上下文,或者你也可以构造内部函数:
function F() {
function C() {
return this;
}
return new C();
}
var o = new F();