С началом выполнения программы на ECMAScript доступны определенные встроенные объекты. Один из них – глобальный объект – является частью Лексического Окружения исполняемой программы. Другие объекты доступны в качестве исходных свойств глобального объекта.
Если не указано иначе, то внутренним свойством [[Class]] встроенного объекта является "Function", если у этого встроенного объекта имеется внутреннее свойство [[Call]], или "Object", если у этого встроенного объекта нет внутреннего свойства [[Call]]. Если не указано иначе, то изначально значение внутреннего свойства [[Extensible]] встроенного объекта равно true.
"Function"
"Object"
Многие встроенные объекты являются функциями: они могут быть вызваны с аргументами. Более того, некоторые из них являются конструкторами, то есть – функциями, используемыми с оператором new. Для каждой встроенной функции данная спецификация описывает требуемые этой функцией аргументы, а также свойства объекта типа Function. Кроме того, для каждого встроенного конструктора данная спецификация описывает свойства объекта-прототипа этого конструктора, а также свойства конкретных экземпляров объекта, которые возвращаются выражением new, вызывающим этот конструктор.
new
Если в описании какой-либо конкретной функции не указано иначе, то, если функции или конструктору, о которых идет речь в данной главе, передаётся меньше аргументов, чем требуется для данной функции, эта функция или конструктор будут вести себя в точности так, как если бы все им были переданы недостающие аргументы со значением undefined.
Если в описании какой-либо конкретной функции не указано иначе, то, если функции или конструктору, о которых идет речь в данной главе, передаётся больше аргументов, чем разрешено для данной функции, то лишние аргументы будут вычисляться при вызове и затем будут проигнорированы этой функцией. При этом реализация может определять обусловленное конкретной реализацией поведение, касающееся этих лишних аргументов. Но это поведение не заключается в генерировании исключения TypeError, поскольку уже сам факт наличия лишних аргументов обеспечивает появление этого исключения.
ПРИМЕЧАНИЕ Если реализация должна добавлять к набору встроенных функций дополнительные возможности, рекомендуется это делать не путём добавления к существующим функциям новых параметров, а путём добавления новых функций.
В качестве значения внутреннего свойства [[Prototype]] каждая встроенная функция и каждый встроенный конструктор имеет объект-прототип Function, который представляет собой начальное значение выражения Function.prototype (15.3.4).
Function.prototype
Если не указано иначе, в качестве значения внутреннего свойства [[Prototype]] каждый встроенный объект-прототип имеет объект-прототип Object, представляющий собой начальное значение выражения Object.prototype (15.2.4). (Это не относится к самому объекту-прототипу Object).
Object.prototype
Ни одна из описываемых в данной Главе встроенных функций, не являющихся конструкторами, не должна реализовывать внутренний метод [[Construct]], если только в описании какой-либо конкретной функции не указано иначе. Ни одна из описываемых в данной Главе встроенных функций не должна иметь свойство prototype, если только в описании какой-либо конкретной функции не указано иначе.
prototype
В данной главе в целом описываются отдельные варианты поведения в случаях, когда конструктор "вызывается как функция" и в случаях, когда он "вызывается как часть выражения new". Поведение, когда конструктор "вызывается как функция" соответствует вызову внутреннего метода [[Call]] этого конструктора, а поведение, когда конструктор "вызывается как часть выражения new", соответствует вызову внутреннего метода [[Construct]] этого конструктора.
Каждый описываемый в данной главе объект типа Function (используемый либо в качестве конструктора, либо в качестве обычной функции, или в качестве и того и другого), имеет свойство length с целочисленным значением. Если не указано иначе, это значение равно наибольшему количеству именованных аргументов, показываемых в заголовках подвыражения для описания функции, включая необязательные параметры.
length
ПРИМЕЧАНИЕ Например, объект типа Function, который представляет собой начальное значение свойства slice для объекта-прототипа String, описан под заголовком подвыражения “String.prototype.slice (start, end)”, который показывает два именованные аргумента start и end, поэтому значение свойства length этого объекта Function равно 2.
slice
2
В каждом случае свойство length встроенного объекта Function, описанного в этом выражении, имеет атрибуты { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }. Все остальные свойства, описанные в данном выражении, имеют атрибуты { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }, если не указано иначе.