无法创建在闭包中定义的函数对象?

时间:2014-10-10 15:44:14

标签: javascript

为什么我无法从闭包中定义的函数创建对象?

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();    

2 个答案:

答案 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