Класс Function

Класс Function позволяет создавать функцию как экземпляр класса. Делается это таким образом:

<Переменная> = new Function([<Параметр 1>[, ... , <Параметр N>],]
                             <Тело функции>)

Например, функцию суммирования двух чисел:

function sum(x, y) {
   return x + y;
}

можно переписать так (оператор new можно не указывать):

let sum = new Function('x', 'y', 'return x + y');
console.log( typeof sum ); // function
console.log( sum(5, 7) );  // 12

Указывать тело функции в виде строки очень неудобно. По этой причине данным способом никто не пользуется.

Каждая функция содержит следующие методы из класса Function:

  • call([<Объект>[, <Параметры через запятую>]]) — вызывает функцию в контексте объекта <Объект> и передает ей значения, указанные во втором и последующих параметрах. Объект, указанный в первом параметре метода call(), доступен внутри функции через указатель this:
function sum(x, y) {
   console.log(this); // { a: 1 }
   return x + y;
}
let obj = { a: 1 };
console.log( sum.call(obj, 5, 7) ); // 12

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

function sum(x, y) {
   console.log(this); // Object [global] {...}
   return x + y;
}
console.log( sum.call(null, 5, 7) ); // 12
  • apply([<Объект>[, <Массив с параметрами>]]) — метод аналогичен методу call(), но значения для функции указываются в виде массива:
function sum(x, y) {
   console.log(this);
   return x + y;
}
let obj = { a: 1 };
console.log( sum.apply(obj, [5, 7]) );  // 12
console.log( sum.apply(null, [5, 7]) ); // 12
  • bind(<Объект>[, <Параметры через запятую>]) — создает новый объект функции с указанным в первом параметре контекстом, который доступен внутри функции через указатель this:
global.a = 22;
let obj = {
   a: 33,
   getA: function() {
      console.log(this);
      return this.a;
   }
};
let func = obj.getA;
// this - глобальный контекст
console.log( func() );          // 22
// this - контекст obj
let funcGetA = func.bind(obj);
console.log( funcGetA() );      // 33

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов