Как орагнизовать наследование в Javascript таким образом, чтобы наследовались статические методы? Наследование у меня реализуется так:var Parent = function(){
this.foo='foo';
};
Parent.prototype.method = function(){
console.log('i am not static');
};
Parent.staticMethod = function(){
console.log('i am static');
}
var Child = function(){
Parent.apply(this, arguments);
this.bar = 'bar';
};
Child.prototype = new Parent();
var kid = new Child();
kid.method();//все оукей
Child.staticMethod();//undefined is not a function
Как вы заметили, Child.staticMethod === undefined.
Я знаю, что можно сделать: Child.staticMethod = Parent.staticMethod
Такое решение меня не устранивает, потому что статических методов много, иерархия классов будет постоянно расти и добавлять для каждого класса и метода по строчке кода я не хочу.
Поделитесь, пожалуйста, идеями реализации наследования в javascript, при котором можно удобно наследовать статические методы.

21 Авг 2019 в 07:09
165 +1
1
Ответы
1

Одним из способов реализации наследования статических методов в JavaScript является использование функции-помощника, которая будет копировать статические методы родителя в дочерний класс. Вот как это может быть реализовано:

var extend = function(child, parent) {
for (var key in parent) {
if (parent.hasOwnProperty(key)) {
child[key] = parent[key];
}
}
var Surrogate = function() { this.constructor = child; };
Surrogate.prototype = parent.prototype;
child.prototype = new Surrogate();
};
var Parent = function(){
this.foo='foo';
};
Parent.prototype.method = function(){
console.log('i am not static');
};
Parent.staticMethod = function(){
console.log('i am static');
}
var Child = function(){
Parent.apply(this, arguments);
this.bar = 'bar';
};
extend(Child, Parent);
var kid = new Child();
kid.method(); //все окей
Child.staticMethod(); //теперь работает

Таким образом, функция extend скопирует статические методы родительского класса в дочерний класс, и теперь вы сможете вызывать их как статические методы дочернего класса.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир