Apply
Эта возможность отсутствует спецификации ECMA, соответствующей JavaScript 1.3, но ожидается в следующей её версии.
Позволяет применять метод одного объекта в контексте другого объекта (вызывающего объекта).
Метод из
JavaScript 1.3
Синтаксис
apply(thisArg[, argArray])
Параметры
thisArg |
Параметр для вызывающего объекта.
Описание
Вы можете назначить другой объект this при вызове существующей функции. this
ссылается на текущий объект, вызывающий объект. С помощью apply
Вы можете написать метод один раз и затем наследовать его в другом объекте без необходимости переписывать метод для нового объекта.
apply очень похож на call, за исключением поддерживаемых типов аргументов. Вы можете использовать массив аргументов вместо именованного набора параметров. С помощью apply Вы можете использовать литерал массива, например, apply(this, [name, value]), или объект Array, например, apply(this, new Array(name, value)).
Вы можете также использовать для параметра argArray. arguments
это локальная переменная функции. Она может быть использована для всех неспецифицированных аргументов вызываемой функции. Таким образом, Вы не должны знать аргументы вызываемого объекта, когда применяете метод apply. Вы можете использовать arguments
для передачи всех аргументов вызываемому объекту. Вызванный объект после этого отвечает за обработку этих аргументов.
Примеры
Вы можете использовать apply для создания цепочки конструкторов для объекта, как в Java. В этом примере конструктор объекта product определяется с двумя параметрами, name и value. Другой объект, prod_dept, инициализирует свою уникальную переменную (dept) и вызывает конструктор для product
в своём конструкторе для инициализации других переменных. В данном примере параметр arguments
используется для всех аргументов конструктора объекта product.
Function product(name, value){
this.name = name;
if(value > 1000)
this.value = 999;
else
this.value = value;
}
Function prod_dept(name, value, dept){
this.dept = dept;
product.apply(product, arguments);
}
prod_dept.prototype = new product();
// поскольку 5 меньше 100, значение устанавливается
cheese = new prod_dept("feta", 5, "food");
// поскольку 5000 больше 1000, значением будет 999
car = new prod_dept("honda", 5000, "auto");