使用函数构造函数创建Javascript对象

使用函数构造函数创建Javascript对象,javascript,closures,Javascript,Closures,我希望obj是F1的实例(“this.prop”中的“this”指下面代码段中的F1对象,类似地,我认为C1的“return this”中的“this”指的是F1,事实并非如此。它指的是全局窗口对象),但实际上它是窗口的实例。为什么呢?你能解释一下吗 function F1() { this.prop = 5; function C1() { return this; } return C1(); } var obj = new F1(); 如果您只是在创建F1的实例,则

我希望obj是F1的实例(“this.prop”中的“this”指下面代码段中的F1对象,类似地,我认为C1的“return this”中的“this”指的是F1,事实并非如此。它指的是全局窗口对象),但实际上它是窗口的实例。为什么呢?你能解释一下吗

function F1() {
  this.prop = 5;
  function C1() {
   return this;
  }
  return C1();
}
var obj = new F1();

如果您只是在创建
F1
的实例,则只需执行以下操作:

function F1() {
  this.prop = 5;
}
var obj = new F1();
你不需要归还任何东西


内部
C1
中的
this
与外部的
this
不同。如果要保留外部的
,以便
C1
可以使用它,请将其存储到另一个变量中

function F1() {

    //preserve "this" from outside 
    var that = this;

    this.prop = 5;

    function C1() {
       return that; //"that" is "this" of the outside
    }
}

看一看。基本上,
this
的设置取决于函数的调用方式,而
C1()
中的
this
绝对不应该是与
new F1()
中相同的对象。谢谢,但我想知道,当C1是F1的私有函数时,C1中的this如何引用全局对象窗口,不是吗?。这是一个有点难以理解的梅特的解释,特别是在一节。这是JavaScript的缺陷之一,内部函数可以访问全局对象。