Объект Function в JavaScript
Все функции в программе являются выполняемыми объектами и наследниками класса Function
. Конструктор Function
позволяет создать функцию в общем потоке скрипта (Function Expression
). В качестве аргументов конструктору передаются строки, содержащие список локальных переменных и тело функции. Тело функции указывается последним аргументом. Локальные переменные можно указать одной строкой или по отдельности. Порядок их следования сохраняется при создании функции.
func = new Function('arg1', 'arg2', '/* тело функции */'); func = new Function('arg1, arg2', '/* тело функции */'); /* эти форматы равноценны следующей записи */ func = function(arg1, arg2) { /* тело функции */ };
Вне зависимости от того, где происходит вызов конструктора, JavaScript считает, что функция создаётся в глобальной области видимости (будто конструктор Function
создаёт метод глобального объекта, хотя это не так). Поэтому такая функция получит доступ только к своим локальным переменным и глобальным переменным.
function outer() { var a = 2; var inner = new Function('', 'alert(a);'); inner(); } var a = 1; outer(); // 1 alert('inner' in window); // false
Объект Function
не имеет своих собственных свойств и методов, но к нему применимы свойства и методы из его прототипа.
Свойства наследников Function
constructor
Свойство constructor
наследуется из класса Object
.
function fake() {} alert(fake.constructor); /* 'function Function() {[native code]}' */
length
Свойство length
определяет количество аргументов, которые ожидаются функцией.
function fake(a, b, c, d) {} alert(fake.length); // 4
Методы наследников Function
toString()
Метод toString()
наследуется из класса Object
.
var sum = new Function('a, b', 'return (a + b);'); alert(sum); /* в переменной sum "анонимная" функция function anonymous(a, b) { return (a + b); } */