Сообщение от Voronar
|
Здравствуйте хочу реализовать сабж в JS.
Есть вот такой код:
function Interface() {};
Interface.prototype.p1 = "property1";
function Class() {};
Class.prototype = new Interface();
var obj = new Class();
console.log(obj.p1);
Так всё работает как надо, но у меня есть один вопрос. Почему в свойстве prototype "класса наследника" Class нужно указывать именно экземпляр функции-конструктора Interface, а не саму функцию-конструктор. А то получается, что нужно сначала потратить память для создания объекта, а потом уже только я получаю возможность "наследования". А если я буду наследовать 20 "классов"?
|
А это и не правильно. В таком случае наследующий класс не сможет иметь своих методов. Надо, чтобы .prototype.__proto__ наследующего класса было равно .prototype наследуемого. Реализуется как-то так:
function inherits(Child, Parent) {
Child.prototype = Object.create(Parent.prototype, {
constructor: {
writable: true,
configurable: true,
enumerable: false
}
})
}
Вообще я бы посоветовал смотреть в сторону ES6, если хочется нормального ООП. Это еще неутвержденная спецификация Javascript, пока что на ней можно писать через
компиляцию (спасибо
kobezzza за ссылку).
class Parent {
constructor() {
}
method() {
}
}
class Child extends Parent {
static staticMethod() {
}
get getter() {
}
}