Показать сообщение отдельно
  #11 (permalink)  
Старый 25.10.2014, 06:07
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Сообщение от 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() {

  }
}

Последний раз редактировалось Erolast, 25.10.2014 в 16:16.
Ответить с цитированием