Я знаю множество разных подходов к наследованию JavaScript. Я думаю, что одним из наиболее важных факторов является то, работает ли помощник по кодам и структура с моделью наследования.
Например, в ExtJS наследование включает в себя:
MyApp.SuperWindow = Ext.extend(Ext.Window, {
constructor: function() {
this.doSomething();
MyApp.SuperWindow.superclass.constructor.apply(this, arguments);
},
doSomething: function() {
}
});
Наше SuperWindow расширяет оконный компонент Ext дополнительными функциональными возможностями. Хотя это наследование работает, вы теряете помощника по коду и схему всех IDE, которые я знаю (Eclipse, Netbeans, Aptana, NuSphere и др.).
Однако вы можете сделать что-то вроде:
MyApp.SuperWindow = {
constructor: function() {
this.doSomething();
MyApp.SuperWindow.superclass.constructor.apply(this, arguments);
},
doSomething: function() {
}
});
MyApp.SuperWindow = Ext.extend(Ext.Window, MyApp.SuperWindow);
Но это выглядит просто ужасно. Вам нужно набрать MyApp.SuperWindow
трижды (не включая вызов родительского конструктора, который вы можете написать с помощью this
).
Как бы вы пошли по поводу наследования в JavaScript, сохраняя при этом помощников и контуров кода?
Я хотел бы сохранить концепцию родителя / супер с моделью наследования. Поскольку типичное наследование включает размещение копии объекта только в своем прототипе, у вас нет таких вещей, как supers.