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