04. Functions as Objects

Функции в JS являются специальной разновидностью объектов, с которым связан выполняемый код. Хоть для функции typeof вернет значение "function", обращаться и взаимодействовать с функциями можно как с объектами.

Каждая функция является экземпляром класса Function и наследует свойства от Function.prototype, который в свою очередь наследует от Object.prototype.

const f = () => {};
Object.prototype.isPrototypeOf(f); // true

Свойства функции:

  • caller - вернет объект, вызвавший данную функцию.

  • length - число объявленных параметров функции.

  • name - возвращает имя функции

  • constructor - как обычно ссылка на функцию-конструктор.

  • Каждая функция создается с дополнительными скрытыми свойствами - контекстом вызова [[Scope]] функции и кодом [[Source]] функции.

Методы:

  • apply/bind/call -- косвенный вызов функции

  • toString -- возвращает исходный код функции в виде форматированной строки (ES2018).

    • Исходный код, если это возможно;

    • В противном случае - стандартная вставка ("function FunctionName() { [native code] }").

Last updated