JavaScript свойство Function.prototype
Определение и применение
Свойство Function.prototype хранит общий прототип обычных функций — объект, от которого они наследуют
call(),
apply(),
bind()
и
toString(). Само свойство конструктора Function нельзя переназначить, но объект, на который оно ссылается, не
заморожен. У функций-генераторов и асинхронных функций есть промежуточные прототипы, чья цепочка также ведёт к
Function.prototype.
Атрибуты свойства: writable разрешает присваивание, enumerable определяет участие в
перечислении свойств, configurable разрешает удаление и переопределение.
| Атрибут | Значение |
|---|---|
writable |
false |
enumerable |
false |
configurable |
false |
Подробную информацию о дескрипторах свойств вы можете получить в описании метода
defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
JavaScript синтаксис:
Function.prototype
Спецификация
ECMAScript — Function.prototype.
Свойство prototype конкретной функции
func.prototype — другой объект: при вызове обычного конструктора через new он становится
прототипом созданного экземпляра. Свойство обычной функции-конструктора имеет атрибуты writable: true,
enumerable: false, configurable: false. У класса writable равно
false.
Примеры, попробуйте сами
Два разных прототипа функции
Измените поле экземпляра и сравните общий прототип функции с прототипом созданного объекта.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
function Person(name) {
this.name = name
}
const person = new Person('Анна')
console.log(Object.getPrototypeOf(Person) === Function.prototype) // true
console.log(Object.getPrototypeOf(person) === Person.prototype) // true
console.log(person.name)
console.log(Object.hasOwn(() => {}, 'prototype')) // false
console.log(Object.hasOwn(function* () {}, 'prototype')) // true