我尝试了不同的东西并最终得到了这些代码..
var f1 = function() {
this.x = 10;
this.innerf = function() { console.log(this.x); }
}
var of1 = new f1();
of1.innerf();
var f2 = function() {
return function() {
this.x = 10;
this.innerf = function() { console.log(this.x); }
}
}
var of2 = new f2();
of2.innerf();
这是投掷错误??! of2.inner不是函数
所以,我的匿名函数将相同的函数体返回给我的变量。 为什么我仍然无法实例化?
答案 0 :(得分:5)
第一部分返回一个对象,您可以调用innerf
方法。
第二部分返回一个函数,如果你调用它,它将返回一个对象。但你没有。
这样可行。调用函数f2()。它的返回值是匿名函数。然后,使用new <return value of f2>()
,您可以创建对象的实例。
var f2 = function() {
return function() {
this.x = 10;
this.innerf = function() { console.log(this.x); }
}
}
var of2 = new (f2())();
of2.innerf();
// The two lines above can also be written as:
var of3constructor = f2(); // This returns the inner anonymous function.
var of3 = new of3constructor(); // This creates an instance by invoking the anonymous function.
of3.innerf();
答案 1 :(得分:1)
有效的例子:
直接创建
var f1 = function() {
this.x = 11;
this.innerf = function() {
console.log(this.x);
}
}
var of1 = new f1();
of1.innerf();
从函数返回新对象:
var f2 = function() {
return new function() {
this.x = 12;
this.innerf = function() {
console.log(this.x);
}
}
}
var of2 = f2();
of2.innerf();
返回对象:
var f3 = function() {
return {
x: 13,
innerf : function() {
console.log(this.x);
}
}
}
var of3 = f3();
of3.innerf();
另一个:
var f4 = function() {
return function() {
this.x = 10;
this.innerf = function() {
console.log(this.x);
}
}
}
var of4 = new (f2())();
of2.innerf();
请记住,当您调用没有“new”关键字的函数时,“this”指向声明函数的对象,在本例中为“window”
答案 2 :(得分:0)
您需要将此函数从内部函数返回到外部函数。您还需要立即运行内部函数。
<强>的jsfiddle:强> http://jsfiddle.net/5dxybbb5/
var f1 = function() {
this.x = 10;
this.innerf = function() {console.log(this.x);}
}
var of1 = new f1();
of1.innerf();
var f2 = function() {
return function() {
this.x = 10;
this.innerf = function() {console.log(this.x);}
return this;
}();
}
var of2 = new f2();
of2.innerf();
这也解释了函数声明后的() What is the (function() { } )() construct in JavaScript?