• Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Открыть меню    

    __proto__, наследование и полиморфизм

    Цепочка прототипов, принцип работы

    У каждого объекта есть ствойство __proto__, которое является ссылкой на его прототип.

    Работа цепочки прототипов:

    Объект (изначально свойства объект ищутся в нем самом)
        (если их нет)
    
        ↓
    
    по __proto__ (идет в прототип)
        (если их нет в прототипе)
    
        ↓
    
    по __proto__ прототипа (идет в прототип прототипа)
    
    и т.д. вплоть до корневого Object

    __proto__ в ES6

    Свойство __proto__ изначально является нестандартным свойством, но в ES6 его стандартизировали.

    var obj1 = {
        //...
    };
    
    var obj2 = {
        __proto__: obj1
    }

    Также стоит отметить, что в ES6 для задания прототипа у существующего объекта используется метод Object.setPrototypeOf(...):

    var obj1 = {
        //...
    };
    
    var obj2 = {
        //...
    }
    
    Object.setPrototypeOf(obj2, obj1);

    Способ наследование - пустой конструктор

    Запись в прототип объекта потомка родителя.

    Обычно наследование происходит при помощи пустого конструктора, чтобы не инициализировать лишние данные.

    var Parent = function() {
    };
    
    Parent.prototype = {
        parentMethod: function() {}
    }
    
    var Child = function() {
    };
    
    var EmptyConstructor = function() {};
    
    EmptyConstructor.prototype = Parent.prototype;
    
    Child.prototype = new EmptyConstructor();
    
    var child = new Child();
    
    console.log("child: ", child);

    Полиморфизм

    Полиморфизм (полис - много, морф - форма)

    Проявляется с двух сторон.

    Первое проявление полиморфизма - способность одного и того же метода или функции работать с разными данными. Пример:

    //new Date(/* разные возможные параметры */);
    new Date(2015, 0, 13)
    new Date('2015-01-13')

    Второе проявление полиморфизма - различие одних и тех же методов в реализации. Одинаково называющиеся методы у разных объектов могут работать по-разному. Пример:

    new Object().toString()
    new Date('2015-01-13').toString()

    Одинаковый метод toString делает разные вещи.

    Реализуется второй подход к полиморфизму с помощью переопределения методов родительского элемента в дочернем.

    Обратите внимание, что так мы переопределяем методы при наследовании, если это требуется, в "классах" javascript.

    Наследование основанное на классах в ES6

    Классы в ES6

    Еще одна статья про наследование

    Наследование с использованием цепочки прототипов

    test

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