假设我有以下代码:
(function($) {
var Obj = {
init: function() {
var c1 = Object.create(this.MyChild);
var c2 = Object.create(this.MyChild);
c1.init(); //not working!!!
},
MyChild: function() {
this.init = function() {
console.log('calling MyChild init function');
}
}
};
Obj.init();
})(jQuery);
创建Obj时,我使用了object literal,因为我不需要创建它的实例,并且在创建MyChild对象时,我使用了构造函数并使用了Object.create,因为我需要创建MyChild的多个实例。
但是,当我调用Object.create时,它不起作用,当调用c1.init()时,它表示init函数未定义,但如果我将Object.create(this.MyChild)替换为:< / p>
var c1 = new this.MyChild();
c1.init();
为什么?
答案 0 :(得分:1)
我认为你应该使用
var c1 = Object.create(this.MyChild.prototype);
而不是
var c1 = Object.create(this.MyChild);
答案 1 :(得分:1)
Object.create(func)
与new func()
没有做同样的事情!
Object.create()
创建一个(否则为空!)对象,该原型将被设置为该对象,并传递给该函数(MDN)
要在示例中使用Object.create()
,您可以像这样修改它:
(function($) {
var Obj = {
init: function() {
var c1 = Object.create(this.MyChild);
var c2 = Object.create(this.MyChild);
c1.init(); //not working!!!
},
MyChild: {
init: function() {
console.log('calling MyChild init function');
}
}
};
Obj.init();
})(jQuery);
但是在这种情况下,一切都只是POINT到你的MyChild
对象。 MyChild
的属性将在您使用Object.create()
创建的每个对象之间共享。