我需要扩展对象的原型而不删除它的当前原型
var obj = (function() {
function Obj(){
}
Obj.prototype.func1 = function() {}
extend = {
func2: function(){}
}
Obj.prototype = extend;
return Obj;
}());
如何执行此操作并保留func1
?
答案 0 :(得分:2)
就像使用for-in循环将属性从现有extend
对象复制到Obj.prototype
一样简单:
for (var key in extend)
// make sure it's actually a direct property of extend
if (extend.hasOwnProperty(key))
// copy over value from extend into prototype
Obj.prototype[key] = extend[key];
答案 1 :(得分:1)
Obj.prototype.func2 = function() {}
...只需继续向现有原型添加方法。
答案 2 :(得分:1)
如果要从其他对象“导入”属性,可以创建“扩展”功能:
function extend(o1, o2) {
for (var key in o2)
if (o2.hasOwnProperty(key))
o1[key] = o2[key];
return o1;
}
然后:
extend(Obj.prototype, extend);