Пытаясь понять, как наследование может быть сделано в Javascript, я наткнулся на множество различных реализаций, включая Crockfords, Resigs, Prototype
, klass
и другие.Наследование Javascript с доступом ко всем * методам в «суперклассе»?
Что я пропустил (я готовиться себя к шуму) был Smalltalkish самостоятельной/супер пара: self
играет такую же роль, чем this
, а именно, представляющей текущий «объект», и super
со ссылкой на суперклассе-только версии this
,
[Пропустить «]», если вы знаете, что super
делает в Smalltalk: Предположим, что Subclass
имеет перекрываться method1
определено в Superclass
, я все еще могу получить доступ к суперкласса реализации с использованием super.method1()
в Subclass.method2()
. Это не будет выполнять код Subclass.method1()
.
function Superclass() {
}
Superclass.prototype.method1 = function() {
return "super";
}
function Subclass() {
}
Subclass.prototype.method1 = function() {
return "sub";
}
Subclass.prototype.method2 = function() {
alert (super.method1());
}
var o = new Subclass;
o.method2(); // prints "super"
]
Есть ли пакет "Javatalk" там? До сих пор я видел только эмуляции OO в Javascript, которые предоставляют доступ к реализации суперкласса текущего метода (method2
), а не другие (например, method1
).
Спасибо, NOBI
Одна из язвенных язв - «Есть так много способов» :-) Итак, пришло время написать мою собственную функцию подкласса! SO много повторений «Суперкласса» и «Подкласса» и «Прототип» - вообще не выглядит СУХОЙ ... Спасибо в любом случае – virtualnobi
@virtualnobi Вы можете определенно сделать этот DRYer, особенно если вы инкапсулируете процесс наследования внутри функции. Вы всегда можете выдвинуть его в крайности и иметь чрезвычайно общий метод супер, но я бы не рекомендовал этого. – plalx