用函数构造函数创建Javascript异常

时间:2012-04-21 01:59:48

标签: javascript closures

我期待obj成为F1的实例('this.prop'中的'this'在下面的代码片段中引用了F1对象,同样我认为'这个'在'返回此'的C1中指的是F1,这是不是这样的。它指的是Global Window对象),但实际上它是Window的一个实例。这是为什么 ?你能解释一下吗?

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

1 个答案:

答案 0 :(得分:1)

如果您只是创建F1的实例,那么就这样做:

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

你不需要退货。


this内的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
    }
}