Функция как объект. Методы call и apply

Последнее обновление: 1.11.2015

В JavaScript функция тоже является объектом - объектом Function и тоже имеет прототип, свойства, методы. Все функции, которые используются в программе, являются объектами Function и имеют все его свойства и методы.

Например, мы можем создать функцию с помощью конструктора Function:

var square = new Function('n', 'return n * n;');
console.log(square(5));

В конструктор Function может передаваться ряд параметров. Последний параметр представляет собой само тело функции в виде строки. Фактически строка содержит код javascript. Предыдущие аргументы содержат названия параметров. В данном случае определяется функция возведения числа в квадрат, которая имеет один параметр n.

Среди свойств объекта Function можно выделить следующие:

  • arguments: массив аргументов, передаваемых в функцию

  • length: определяет количество аргументов, которые ожидает функция

  • caller: определяет функцию, вызвавшую текущую выполняющуюся функцию

  • name: имя функции

  • prototype: прототип функции

С помощью прототипа мы можем определить дополнительные свойства:

function display(){
	
	console.log("привет мир");
}
Function.prototype.program ="Hello";

console.log(display.program); // Hello

Среди методов надо отметить методы call() и apply().

Метод call() вызывает функцию с указанным значением this и аргументами:

function add(x, y){
	
	return x + y;
}
var result = add.call(this, 3, 8);

console.log(result); // 11

this указывает на объект, для которого вызывается функция - в данном случае это глобальный объект window. После this передаются значения для параметров.

При передаче объекта через первый параметр, мы можем ссылаться на него через ключевое слово this:

function User (name, age) {
	this.name = name;
	this.age = age;
}
var tom = new User("Том", 26);
function display(){
	console.log("Ваше имя: " + this.name);
}
display.call(tom); // Ваше имя: Том

В данном случае передается только одно значение, поскольку функция display не принимает параметров. То есть функция будет вызываться для объекта tom.

Если нам не важен объект, для которого вызывается функция, то можно передать значение null:

function add(x, y){
	
	return x + y;
}
var result = add.call(null, 3, 8);

console.log(result); // 11

На метод call() похож метод apply(), который также вызывает функцию и в качестве первого параметра также получает объект, для которого функция вызывается. Только теперь в качестве второго параметра передается массив аргументов:

function add(x, y){
	
	return x + y;
}
var result = add.apply(null, [3, 8]);

console.log(result); // 11
Помощь сайту
WebMoney
  • P378451176208
  • Z280152397659
ЮMoney/Яндекс-Деньги
  • 410011174743222
PayPal
  • metanit22@mail.ru
Перевод на карту
  • Номер карты: 4048415020898850