__proto__ внутри свойства прототипа функции JavaScript

Представьте себе простую функцию:

function Person();

Я знаю, что Person имеет свойство __proto__, которое ссылается на Function.prototype.

Я также знаю, что Person имеет свойство prototype. Когда я пишу: function Person() {}, автоматически создается новый объект-прототип:

Person.prototype = { constructor: Person };

но внутри блока Person.prototype у меня тоже есть __proto__, так что же это за __proto__, когда он создан, кто его создает?

Я могу знать, что это прототип Object, но всегда ли так?


person O. Shekriladze    schedule 12.07.2019    source источник
comment
Все конструкторы имеют цепочки прототипов, раскрывающиеся до Function.prototype, и все экземпляры объектов, созданные этими конструкторами, имеют цепочки прототипов, раскрывающиеся до Object.prototype.   -  person Patrick Roberts    schedule 12.07.2019
comment
comment
Кроме того, __proto__ является псевдо-свойством (технически это геттер/сеттер для Object.prototype), раскрывающим внутренний объект [[Prototype]]. Таким образом, даже {} (пустой объект) имеет свойство __proto__...   -  person FZs    schedule 19.01.2021


Ответы (1)


Я не уверен, понимаю ли я, что вы имеете в виду, но у прототипов есть свои прототипы, у которых могут быть свои прототипы, у которых могут быть свои прототипы, и так далее до null. Основываясь на вашем вопросе, вы можете знать, что это называется цепочкой прототипов, если не знаете сейчас :) Вы можете прочитать более подробно об этом на Документы Mozilla.

person Kuba Michalski    schedule 12.07.2019