Ядро JavaScript 1.5. Справочник

       

Apply


Эта возможность отсутствует спецификации ECMA, соответствующей JavaScript 1.3, но ожидается в следующей её версии.

Позволяет применять метод одного объекта в контексте другого объекта (вызывающего объекта).

Метод из Реализован в

JavaScript 1.3


Синтаксис

apply(thisArg[, argArray])

Параметры

thisArg

Параметр для вызывающего объекта.argArray

Массив аргументов для объекта.

Описание

Вы можете назначить другой объект 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");

См. также



Содержание раздела