2012-04-21 72 views
0

我期待obj成为instanceof F1(this.prop中的'this'引用下面代码片段中的F1对象,同样我认为'this'中的'this' C1指F1,不是这种情况,指的是全局窗口对象),但实际上它是Window的一个实例。这是为什么 ?你能解释一下吗?使用函数构造函数创建Javascript异议

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

看一看[什么MDN说,关于'this'(https://developer.mozilla.org/EN/JavaScript的/参考/运营/本)。基本上'this'是根据函数的调用方式来设置的,并且'C1()'中的'this'绝对不应该与'new F1()'中的对象相同。 – nnnnnn 2012-04-21 02:02:50

回答

1

如果你是刚刚创建的F1一个实例,然后只是这样做:

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

你不需要任何回报。


内部C1this是不一样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 
    } 
} 
+0

谢谢,但我想知道C1是如何引用全局对象窗口,当C1是F1的私有函数,不是吗?这对我来说有点难以理解 – krishna 2012-04-21 02:22:05

+0

它在[nnnnnn的评论](http://stackoverflow.com/questions/10255547/javascript-objection-creation-with-function-contructor/10255586#comment13184216_10255547)中解释过,特别是在[函数上下文](https://developer.mozilla.org/en/JavaScript/Reference/Operators/this#Function_context)部分。这是JavaScript内部函数可以访问全局对象的缺陷之一。 – Joseph 2012-04-21 02:32:08