使用函数构造函数创建Javascript对象
我希望obj是F1的实例(“this.prop”中的“this”指下面代码段中的F1对象,类似地,我认为C1的“return this”中的“this”指的是F1,事实并非如此。它指的是全局窗口对象),但实际上它是窗口的实例。为什么呢?你能解释一下吗使用函数构造函数创建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的实例,则
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的缺陷之一,内部函数可以访问全局对象。