Я новичок в OOJS, поэтому, пожалуйста, несите меня на этом. Я пытаюсь получить настройки вроде следующего:JavaScript - прототип наследования
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.prototype = new Item() вместо их объединения. Таким образом, прототип раздела является собственным объектом, который может быть изменен без влияния на Item.prototype. – dandavis
Кроме того, по соображениям производительности вам действительно не нужно использовать метод расширения jQuery. Например, вы можете просто сделать «Item.prototype.date =« x »;' – sbking
@dandavis: omg, который сделал это! Такое маленькое изменение! Благодарю. @Cuberto: Я знаю, что не обязательно использовать jQuery для таких вещей - просто не нужно писать «Item.prototype». ... '. Я просто экспериментирую сейчас - когда дело доходит до применения его на работе, я напишу его до конца. – ClarkeyBoy