Я решил попробовать «простое наследование JavaScript» гения Джона Резига, как подробно описано на этой странице блога:
http://ejohn.org/blog/simple-javascript-inheritance/
Мне интересно, как можно переопределить метод с помощьюкод, который вызывает супер метод.Другими словами, допустим, я начинаю с Person class:
var Person = Class.extend({
init: function ( name, age ) {
this.name = name;
this.age = age;
}
});
Я расширяю этот Person класс для создания нового класса Worker :
var Worker = Person.extend({
init: function ( name, age, occupation ) {
this.name = name;
this.age = age;
this.occupation = occupation;
}
});
В двух версиях метода init есть повторение кода.Следующие две строки выполняются независимо от того, какой класс я использую:
this.name = name;
this.age = age;
Похоже, я должен быть в состоянии вызвать init метод Person класса.из метода init класса Hero , а затем добавьте дополнительную строку кода со свойством оккупация .
Я не могу сделатьчто с кодом мистера Ресига, хотя.Следующее не работает:
var Worker = Person.extend({
init: function ( name, age, occupation ) {
this._super(arguments);
this.occupation = occupation;
}
});
Как только метод extension , вызванный из Person для создания Worker , видит класс *this._super (аргументы) * заменяет работника init на Person's init , оставляя меня с неопределенной профессией property.
У кого-нибудь есть какие-либо предложения относительно того, как обойти это без изменения кода мистера Ресига?В настоящее время я пробую разные способы реализации концепции «супер», но тот факт, что я не могу заставить это работать с существующим кодом, застрял в моей голове.: -)
ОБНОВЛЕНИЕ: я понял, что допустил одну маленькую ошибку при реализации кода мистера Ресига, поэтому он вел себя так, как я описал.@chuckj правильно указал на ошибку в Worker's init тоже.