JavaScript-原型继承

JavaScript - prototype inheritance

本文关键字:继承 原型 JavaScript-      更新时间:2023-09-26

我对OOJS有点陌生,所以请耐心等待。我正在尝试获得如下设置:

Item
    name = "no name"
    description = "no description"
    someVar = "no var"
Section
    name = "Section A"
    //Rest are inherited
    deleted = false

到目前为止,我有:

function Item() {}
function Section() {}
$.extend(Item.prototype, {
    name: "no name",
    description: "no description"
}
Section.prototype = Item.prototype;
$.extend(this.Section.prototype, {
    description: "A section",
    swung: true,
    swing: function() {
        this.swung = false;
        return this;
    }
});
$.extend(this.Item.prototype, {
    "date": "x"
});
$.extend(this.Section.prototype, {
    "someVar": "someValue"
});

如果我创建一个新的部分,我会得到:

Section {
    name: "no name", 
    description: "A section", 
    swung: true,
    swing: function,
    date: "x",
    someVar: "someValue"
}

如果我创建一个新项目,我会得到:

Item {
    name: "no name", 
    description: "A section", 
    swung: true, 
    swing: function, 
    date: "x",
    someVar: "someValue"
}

显然,它们都是相同的,原因是原型是相同的实例。我试图实现的是,所有从Item继承的函数在添加时都会拾取属性,并且对Item原型上属性值的任何更改都不会影响Section上的属性(如果它事先被覆盖的话)。对Section原型的任何更改都不应影响Item原型(如上所述),因为Section将具有特定的属性。有人知道有什么方法可以做到这一点吗?

如果我不清楚,请这样说,而不是否决我:)。提前谢谢。

在JS中继承时,不会将一个原型分配给另一个原型。相反,您将父对象的实例分配给子对象的原型:

Section.prototype = new Item();

您可以签出代码的简化版本(不需要jQuery,这会使一切变得不必要地复杂):http://jsfiddle.net/p3h5C/