原型继承和扩展现有对象
Prototype inheritance and extend existing objects
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
函数。
在 JavaScript 中扩展对象的正确方法是使用 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
相关文章:
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- FabricJS CurvedText对象(扩展)在更新间距和文本属性时未显示
- 如何为特定的javascript对象扩展数组或对象原型
- 具有函数继承的对象扩展数组
- 将 jQuery 对象扩展到我自己的对象
- HTMLCollection 对象扩展
- Javascript 对象扩展
- jQuery用一个对象扩展$.fn
- 有没有一种方法可以在javascript中隔离本机对象扩展
- Backbone或javascript对象扩展错误
- 从另一个对象扩展而不使用object.JavaScript中的assign (ES6特性)
- 对象扩展vs.对象赋值
- 是否可以将一个对象扩展为“;一个函数
- 如何在jquery中用子对象$.扩展对象
- 为什么我有一个共享缓存时,我jQuery.使用相同的缓存对象扩展两个对象
- 使用美元.使用用户定义的对象扩展
- es7对象扩展表示法如何创建浅拷贝来替换原始对象
- 如何使用新对象扩展 $.fn
- 如何在 javascript 中让多个对象扩展 1 个对象
- IE8中对象扩展后的奇怪setAttribute行为