|
|||||||
Классы в Java Script: Вызов родительских методов
Время создания: 05.01.2011 12:05
Текстовые метки: java, script, javascript, call, apply
Раздел: Компьютер - Программирование - Java Script - Классы в JavaScript
Запись: xintrea/mytetra_syncro/master/base/0000003378/text.html на raw.github.com
|
|||||||
|
|||||||
Вызов родительского конструктора В механизме наследования, разобранном выше, есть одно белое пятно. Это - конструктор. Хотелось бы, чтобы конструкторы всех родителей вызывались по порядку до конструктора самого объекта. С наследованием через extend - это очень просто. Вызов родительского конструктора с теми же аргументами, что были переданы, осуществляется так: function Rabbit(..) { ... Rabbit.superclass.constructor.apply(this, arguments) ... } Конечно же, аргументы можно поменять, благо apply() дает возможность вызвать функцию с любыми параметрами вместо arguments в примере. Вызов любых родительских методов Аналогично можно вызвать и любой другой метод родительского класса. Например, вызов метода run() можно осуществить так: Rabbit.superclass.run.apply(this, ...) Что такое apply() Используя apply, вы можете использовать литеральное объявление массива, например fun.apply(this, [name, value]) Вы также можете использовать arguments в качестве параметра argArray. Это избавляет от необходимости знать, с какими параметрами была вызвана исходная функция. Что такое call() Метод call может применяться для вызова функции в контексте нужного объекта. Пример. Вызов метода sayName() в контексте разных объектов: var Animal1 = {name: 'Cat'} var Animal2 = {name: 'Dog'}
function sayName() { // this — ссылка на объект, в контексте которого вызвана функция alert(this.name); }
sayName.call(Animal1) // выдаст сообщение "Cat" sayName.call(Animal2) // выдаст сообщение "Dog" Помимо смены контекста вызова, метод call может передавать в функцию аргументы: var obj = {attr: 10};
function sum(a, b) { alert(this.attr + a + b); }
sum.call(obj, 5, 2) // выдаст сообщение с результатом "17" Если контекст вызова не указан, то функция будет выполнятся в контексте объекта window: window.a = 5 function say() { alert(this.a); } say.call() // выдаст 5 window.a = 5 function say(b) { alert(this.a + b); } say.call(null, 3) // выдаст 8 |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|