Как орагнизовать наследование в 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, при котором можно удобно наследовать статические методы.
Одним из способов реализации наследования статических методов в 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 скопирует статические методы родительского класса в дочерний класс, и теперь вы сможете вызывать их как статические методы дочернего класса.
Одним из способов реализации наследования статических методов в 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 скопирует статические методы родительского класса в дочерний класс, и теперь вы сможете вызывать их как статические методы дочернего класса.