返回构造函数不产生构造函数
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_
。
我想用以下代码创建一个临时构造函数,
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_
。