Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Применение к конструктору метода call c аргументом this (https://javascript.ru/forum/misc/31779-primenenie-k-konstruktoru-metoda-call-c-argumentom.html)

Nubi 20.09.2012 15:25

Применение к конструктору метода call c аргументом this
 
Пытаюсь разобраться в таком демонстрационном примере
function SuperType(){
    this.colors = ["red", "blue", "green"];
}
                   
function SubType(){  
    SuperType.call(this);
}
var instance1 = new SubType();

По-ненашему такой подход называется constructor stealing. Для чего нужно, более-менее понятно - чтобы у каждого экземпляра SubType было свое собственное свойство colors, сделанное в соответствии с "калькой" конструктора SuperType.
Но никак не могу понять, что происходит за кулисами внутри определения SubType (т. е. вот эта строка SuperType.call(this);).
К конструктору SuperType применяется метод call. Но я нигде не вижу слова new, значит такой вызов по идее должен возвращать undefined. Мало того, есть еще и параметр this. Чему тут равен this? Глобальному
объекту?
Совершенно запутался :( , помогите разобраться...

Nubi 20.09.2012 16:17

Похоже понял как эта штука работает. Определение конструктора SubType можно рассмотреть так:
function SubType(){ 
   var this = Object.create(SubType.prototype);
   SuperType.call(this); // при вызове конструктора SubType с new эквивалентно this.colors = ["red", "blue", "green"];
   return this;
}

Теперь все встало на свои места :dance:


Часовой пояс GMT +3, время: 20:32.