Ответ 1
Потому что Function
сам является прототипом Function
console.log(Function instanceof Function);
console.log(Object.getPrototypeOf(Function) === Function.prototype);
Итак, все функции прототипа Function
также доступны в Function
.
Цитата спецификация,
Объект-прототип функции сам по себе является объектом Function (его [[Class]] является "Function" )
Другим способом подтвердить это будет
console.log(Function.call === Function.prototype.call);
это означает, что объект Function.call
и объект Function.prototype.call
совпадают.
console.log(Function.hasOwnProperty('call'));
это означает, что сам объект Function
не имеет свойства call
.
console.log(Function.prototype.hasOwnProperty('call'));
это означает, что объект Function.prototype
имеет свойство call
.
Array.slice
не существует, ноArray.prototype.slice
do
Поскольку прототип функции Array
- это объект Function
, а не объект Array
.
console.log(Object.getPrototypeOf(Array) === Function.prototype);
Вот почему мы получаем call
, apply
, bind
и т.д. в функции Array
. Объект Array
был прототипом Array
, тогда slice
был бы доступен и для объекта Array
.