Так как все больше приходится удалятся от чистого языка к фреймворкам – решил написать себе памятку по возможным паттернам наследования в JavaScript.
Итак как мы можем наследовать свойства одного объекта в другом. Самый простой способ это сделать apply родительского конструктора в дочернем:
// родительский "класс" function Menu(id){ } // дочерний класс function MenuChild(){ Menu.apply(this, args); //вызываем конструктор родителя this.open = function(){} // определяем или переопределяем свойства }
Можно наследовать сразу готовые объекты(а не их конструкторы) используя выстроенное свойство __proto__:
var animal = {"eats": true}; var rabbit = {"jumps": true}; rabbit.__proto__ = animal; alert(rabbit.eats);
Для браузеров, которые не поддерживают свойство __proto__, можно сделать так:
var animal = {"eats": true}; var rabbit = {"jumps": true}; rabbit = Object.create(animal); alert(rabbit.eats);
Наследование с использованием свойства prototype:
var animal = {"eats": true}; function Rabbit(){} Rabbit.prototype = animal; var rabbit = new Rabbit; alert(rabbit.eats);
И универсальный вариант наследования через специальную функцию:
function inherit( proto ){ function F(){} F.prototype = proto; var object = new F; return object; }