Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.09.2012, 15:25
Аспирант
Отправить личное сообщение для Nubi Посмотреть профиль Найти все сообщения от Nubi
 
Регистрация: 06.08.2008
Сообщений: 43

Применение к конструктору метода 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 в 15:27.
Ответить с цитированием
  #2 (permalink)  
Старый 20.09.2012, 16:17
Аспирант
Отправить личное сообщение для Nubi Посмотреть профиль Найти все сообщения от Nubi
 
Регистрация: 06.08.2008
Сообщений: 43

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

Теперь все встало на свои места
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
правильное применение метода stop() Harvey jQuery 11 04.06.2012 20:44
Применение метода к объекту Kiomot jQuery 1 11.07.2011 16:14