var Editor = {};
Editor.Basic = function(obj) {
this.config ={
value: obj
}
};
Editor.Basic.prototype = {
getValue: function() {
return this.config.value;
}
};
Editor.Advanced = function(obj) {
Editor.Basic.call(this, obj);
};
Editor.Advanced.prototype = {
config: {
notValue: !this.config.value
}
};
var extendByPrototype = function(obj1, obj2) {
for (var key in obj2.prototype) {
if (obj2.prototype.hasOwnProperty(key) && obj1.prototype[key] === undefined)
obj1.prototype[key] = obj2.prototype[key];
}
};
extendByPrototype(Editor.Advanced, Editor.Basic);
有没有让Editor.Advanced.prototype
扩展现有对象(当然是递归)而不是覆盖它们? (见extendByPrototype
)
我知道我会检查obj1.prototype[key] !== undefined
,但我不确定我需要做的是以通用方式扩展现有密钥,而不将config
从Editor.Advanced.prototype
移动到构造函数并使用push
函数。
答案 0 :(得分:-1)
在JavaScript中扩展Object的正确方法是使用Object.create(prototype)
。以这种方式创建的对象将具有适当的继承设置。要获取任何对象的原型,您将使用Object.getPrototypeOf(object)
。
Object.create(prototype)
是JavaScript 1.8.5中的新功能。如果您正在寻找向后兼容,则必须使用非标准方式
function extend(child, supertype) {
child.prototype.__proto__ = supertype.prototype;
}
extend(Animal, Lifeform);
extend(Plant, Lifeform);
var anOnion = new Plant();
之后,您可以通过...
获取原型对象object.contructor.__proto__
__proto__
的更多详细信息:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/proto