Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Наследование вызовом родителя. Метод apply() (https://javascript.ru/forum/misc/25600-nasledovanie-vyzovom-roditelya-metod-apply.html)

jsuse 09.02.2012 23:54

Наследование вызовом родителя. Метод 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.


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