Javascript 原型继承和扩展现有对象

Javascript 原型继承和扩展现有对象,javascript,inheritance,call,prototype,extend,Javascript,Inheritance,Call,Prototype,Extend,是否需要使用编辑器.Advanced.prototype来扩展现有对象(当然是递归的),而不是覆盖它们?(如extendedbyprototype所示) 我知道我会检查obj1.prototype[key]!==未定义,但我不确定我需要做什么才能以通用方式扩展现有键,而不必将配置从编辑器.Advanced.prototype移动到构造函数并使用推送函数。在JavaScript中扩展对象的正确方法是使用对象.create(prototype)。以这种方式创建的对象将具有正确的继承设置。要获取任何对

是否需要使用
编辑器.Advanced.prototype
来扩展现有对象(当然是递归的),而不是覆盖它们?(如
extendedbyprototype
所示)


我知道我会检查
obj1.prototype[key]!==未定义
,但我不确定我需要做什么才能以通用方式扩展现有键,而不必将
配置
编辑器.Advanced.prototype
移动到构造函数并使用
推送
函数。

在JavaScript中扩展对象的正确方法是使用
对象.create(prototype)
。以这种方式创建的对象将具有正确的继承设置。要获取任何对象的原型,您将使用
object.getPrototypeOf(object)

Object.create(prototype)
在JavaScript 1.8.5中是新的。如果您正在寻找向后兼容的,则必须使用非标准方式

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);
之后,您可以通过以下方式获得原型对象

function extend(child, supertype) {  
  child.prototype.__proto__ = supertype.prototype;  
}  

extend(Animal, Lifeform);  
extend(Plant, Lifeform);  

var anOnion = new Plant();  

更多关于
\uuuu proto\uuuuu
的详细信息,请点击此处:

如果您想进行深度扩展,jQuery有一个(平庸的)算法等等..让我们检查一下我的理解。您在问是否有方法使类对象扩展实例对象?就像您如何设置Editor.Advanced.prototype={…}?任何人都不应该将此示例用作参考
object.contructor.__proto__