Открыть меню    

Наследование в javascript

__proto__

javascript

var animal = {
    eat: true
}

var rabbit = {
    jump: true;
}

// наследование одного объекта от другого
rabbit.__proto__ = animal;
rabbit.eat;  // true

Свойство __proto__ говорит нам: если какое-либо свойство отсутствует в объекте rabbit, то его надо искать в объекте animal.

Не надо путать свойство __proto__ со свойством prototype, это разные вещи. __proto__ совершенно не кросссбраузерно (ff,ch,sf).

Object.create()

Функция JavaScript Object.create ()

Создает объект, который имеет указанный прототип и (необязательно) содержит указанные свойства.

Object.create(prototype, descriptors)

  • prototype Обязательное. Объект для использования в качестве прототипа. Может быть null.
  • descriptors Необязательный параметр. Объект JavaScript, содержащий один или несколько дескрипторов свойств.

javascript

Object.create(animal); // создаст пустой объект с прототипом animal
                       //Object { eat=true}

var rabbit = Object.create(animal); // аналог rabbit.__proto__ = animal;

Object.create() позволяет создавать объекты с нужным прототипом. Отличие Object.create() от __proto__ в том, что Object.create() позволяет создать объект с нужным прототипом, но не может изменить прототип после создания объекта.

prototype

Функцию-конструктор совместно с прототипом называют Классом. Название класса обычно начинается с заглавной буквы.

Наследование в javascript можно реализовать посредством специального свойства prototype.

Более подробно о прототипах:

javascript

// определяем конструктор:
function example_constr(r,t) {
    this.ad = r;
    this.ak = t;
    this.a_method = function (x,y)
    {
        alert(x+y);
    }
}

// объявляем метод (r_method) в прототипе
example_constr.prototype.r_method = function ()
    {
        this.qu =  this.ad - this.ak;
        console.log(this.qu);
    }

// вызываем конструктор и создаем объект example_constr (krot)
var krot = new example_constr(14,15);
// что равнозначно     krot = {ad:14,ak:15}

// функция берется из прототипа
krot.r_method(); // -1 

Расширяем функционал за счет расширения одного прототипа другим

javascript

function Menu(title){
    this.title = title;
}

Menu.prototype.openMenu = function(){
    console.log("Открыть " + this.title);
}

var menu = new Menu("Симпл меню");
menu.openMenu(); // Открыть Симпл меню


function HardMenu(title){
    this.title = title;
}

HardMenu.prototype = Object.create(Menu.prototype);

var hardMenu = new HardMenu("Тяжелое меню");

hardMenu.openMenu(); // Открыть Тяжелое меню

Примечание

  • Свойство prototype всего лишь задаёт __proto__ у новых объектов.

Комментарии к статье

Добавить комментарий к сниппету

  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта