Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2012, 23:54
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

Наследование вызовом родителя. Метод apply()
Не могу понять, что делает у автора apply.
Вот есть глава в учебнике "что такое наследование". В ней пример:
function MenuHighlight(menuId) {
  Menu.apply(this, arguments); // (1)
 
  var parentOpen = this.open;  // (2)
 
  this.open = function() {     // (3)
    parentOpen();              // (3.1)
    alert('меню открыто');     // (3.2)
  };
}

А ниже идет объяснение. Важное подчеркнул:

Рассмотрим подробно каждую строку этого примера.

1) Вызов Menu.apply(this, arguments) вызывает функцию-конструктор меню, передавая ей текущий объект this и аргументы.
Она успешно срабатывает, инициализует меню и добавит в this публичные свойства и методы, например this.open.

2) Мы хотим заменить метод this.open() на свой, расширенный. Это мы сделаем в следующей строке, а пока скопируем родительский метод в переменную parentOpen, чтобы он остался доступен для вызова.

3) Создадим наш собственный this.open(). Он перезапишет полученный в строке (1).
Запустить родительский метод.
Затем наш собственный код, который выводит сообщение.



Не могу понять из этого объяснения, что делает метод apply.

Сначала в 1) автор пишет, что метод apply передает в Menu объект this.
передавая ей текущий объект this и аргументы.

А потом в 3) он пишет, что метод apply оказывается получает Menu для объекта this, а вовсе не передает.
Создадим наш собственный this.open(). Он перезапишет полученный в строке (1).


Так что же делает apply? Он получает для функции объект или он передает в функцию объект?
Может для автора это как-то и очевидно и одно и тоже, но я пока пытаюсь это освоить и хотелось бы четко понимать что делает метод apply.

Последний раз редактировалось jsuse, 10.02.2012 в 00:02.
Ответить с цитированием
Ответ



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

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