为什么我无法从闭包中定义的函数创建对象?
var outer = function() {
var constructor = function() {
this.foo = 1;
};
return constructor;
};
// Should be: { foo: 1 }, but is: undefined
var constructorObject = new outer()();
// This works
var c = outer();
var constructorObject = new c();
答案 0 :(得分:3)
因为通过调用()()
可以获得inner
函数结果。由于inner
函数没有return
语句,因此它等于undefined.
如果你想返回对象,你的功能应该是:
var inner = function() {
return { foo: 1 };
}
答案 1 :(得分:1)
你需要在括号中包装外部函数调用,如下所示:
var constructorObject = new (outer())();
// ^ ^ parenthesis here
console.log(constructorObject); // constructor {foo: 1}
console.log(constructorObject.foo); // 1