复制和修改用于实例化javascript的类似对象
我有一个物体看起来像复制和修改用于实例化javascript的类似对象,javascript,design-patterns,object,Javascript,Design Patterns,Object,我有一个物体看起来像 var customObject = function() { this.property = "value"; }; customObject.prototype = new otherObject(); customObject.prototype.property2 = function() {}; 等等-它比这个大得多 我可以通过编写new customObject()成功实例化该对象 现在我想创建一个非常相似的对象,尽管有点不同。这涉及到修改某些属性
var customObject = function() {
this.property = "value";
};
customObject.prototype = new otherObject();
customObject.prototype.property2 = function() {};
等等-它比这个大得多
我可以通过编写new customObject()
成功实例化该对象
现在我想创建一个非常相似的对象,尽管有点不同。这涉及到修改某些属性,甚至可能添加或删除某些属性。与上面的示例一样,我希望通过编写newcustomobject2()
来调用它
我想我可以简单地做到:
var customObject2 = new customObject();
customObject2.prototype = customObject.prototype;
customObject2.property = "modified value";
等等
但是,当我尝试通过执行new customObject2()
来实例化它时,我收到一个错误,指出customObject2不是一个函数
我希望我能很好地说明我想要创建的模式。我应该采取什么方法来创建这样的模式?我认为。基本上,new关键字返回的是一个对象,而不是一个函数 你为什么不使用第一次使用的公式?例如:
var customObject2 = function(){};
customObject2.prototype = new customObject();
customObject2.property = "modified value";
new customObject2(); // works!
customObject
的所有属性将由customObject2
的实例通过原型链继承。如果customObject
不是宿主对象(即,如果您尝试以与预期不同的方式调用它,则不会给您非法调用错误)您可以将构造函数应用于不同的此
对象
向后兼容
对象。创建
function objectWithProto(proto) {
var f;
if (Object.create) return Object.create(proto);
f = function () {};
f.prototype = proto;
return new f();
}
看看你的代码,你正在做customObject2=newcustomobject()
。这应该可以解释为什么它不是一个函数。有什么快速的方法可以得到我需要的吗?或者我应该手动创建一个var customObject2=function(){}编码>并循环原始customObject
的所有直接属性,以将它们分配给customObject2
的此
?不,它没有。我很清楚关键字的作用,但我想知道是否有一种快速的方法可以复制一个对象并使其保持“可实例化”。您是否有一个对象的替代方法。创建一个与旧浏览器兼容的对象?哦,等等:谢谢,这是我一直在寻找的简短解决方案,它避免了简单地扩展customObject
@user2180613,但这也是扩展customObject,它只是一种不同的技术。@bfavaretto iirc coffeescript将这种风格与他们的extend
关键字结合使用。我不是在寻找继承。
function objectWithProto(proto) {
var f;
if (Object.create) return Object.create(proto);
f = function () {};
f.prototype = proto;
return new f();
}