为什么这指的是全局对象?

时间:2015-01-16 17:53:04

标签: javascript

我有这段代码:

function F() {
  function C() {
    return this;
  }
  return C();
}
var o = new F();

有人可以解释为什么this在创建对象function C时引用全局对象而不是o?也许这种情况正在发生,因为在创建新对象o时,会唤起现在C属于全局对象的函数this

2 个答案:

答案 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();