Объект 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);
}
*/