返回构造函数不产生构造函数

Returning constructor function does not produce constructor function

我想用以下代码创建一个临时构造函数,

    var foo = function() {
        var bar = {
        a : 3,
        b : {c: 4, d: {e: 5}}
        };

        var f_ = function() {};

        f_.prototype = bar;

        return f_;
    }

根据我的理解,foo 应该 return 一个可以用作构造函数的函数,就像这样 var baz = new foo 但是,构造函数 return 是一个函数,而不是一个东西。我可以从函数 returned,

中看到原型
    >baz.prototype
    { a: 3, b: { c: 4, d: { e: 5 } } }

所以,我的问题是,为什么 foo return 没有构造函数?

您需要对代码稍作修改。如果你想让 foo 成为一个构造函数,那么首先要确保它是一个立即函数,returns 一个新的构造函数:

var foo = function() {
    var bar = {
        a: 3,
        b: {c: 4, d: {e: 5}}
    };

    var f_ = function() {};

    f_.prototype = bar;

    return f_;
}(); 

var obj = new foo();

alert(obj.a + ', ' + obj.b.d.e)

注意,()foo 函数的末尾,那些圆括号使 foo 立即执行并为其分配新函数 f_