🍭 Схематический прототип и цепочка прототипов

JavaScript

20190314150227.png

Схематические прототипы и цепочки прототипов

Прототип и цепочка прототипов являются неизбежными точками знаний в JS📕, в этой статье используется форма графической карты разума, чтобы проследить взаимосвязь между такими понятиями, как прототип, цепочка прототипов, экземпляр, конструктор и т. д.🌚

Конструктор конструктор

Во-первых, давайте напишем构造函数Человек, конструктор, как правило, требует, чтобы первая буква была капитализирована для различения обычных функций:

function Person(){}

прототип

Прототип относится к объекту, а экземпляр «наследует» свойства этого объекта. Свойства, определенные на прототипе, через «наследство», экземпляр также имеет это свойство. Поведение «наследования» реализовано внутри нового оператора.

Не говоря уже об экземпляре, связь между прототипом и конструктором заключается в том, что внутри конструктора есть свойство, называемое прототипом, и через это свойство можно получить доступ к прототипу:

20190314132908.png

Person — конструктор, Person.prototype — прототип

20190314132934.png

экземпляр экземпляр

С помощью конструктора мы можем создавать свойства прототипа, которые можно «наследовать», и создавать экземпляры с помощью оператора new.

20190314141908.png

Допустим, Person, мы хотим создать экземпляр человека, тогда мы можем сделать это с помощью оператора new, а связь между ними проверить через instanceof:

20190314132309.png

Мы определяем свойство на прототипе, тогда экземпляр также может «наследовать» это свойство:

20190314133215.png

прото неявный прототип

экземпляр передан__proto__Доступ к прототипу, поэтому, если это экземпляр, вы можете напрямую получить доступ к прототипу через это свойство:

20190314141947.png

Поэтому оба эквивалентны:

20190314142041.png

Конструктор конструктор

Поскольку конструктор получает доступ к прототипу через прототип, прототип также должен каким-то образом получить доступ к конструктору.

20190314142246.png

Таким образом, отношения между ними должны быть такими:

20190314142755.png

Обратите внимание, что конструктор здесь является свойством прототипа, а конструктор относится к реальному конструктору. Не путайте два имени 😀

Связь между экземплярами, конструкторами и прототипами

Здесь мы видим, что если экземпляр хочет получить доступ к конструктору, он должен быть:

20190314143125.png

Нет никаких свойств или методов, напрямую доступных из экземпляра конструктору:

20190314143254.png

Экземпляры и прототипы через вышеупомянутые__proto__посещать.

В процессе чтения свойств экземпляра, если свойство не найдено в экземпляре, оно будет следовать за__proto__Найдите указанный прототип, а если не сможете найти, попробуйте найти прототип прототипа 🐚:

20190314143837.png

Удаляем комментарий и присваиваем экземпляру атрибут с таким же именем, как видите, напечатанный атрибут указывает на это:

20190314143944.png

Сеть прототипов

Прототипы также могут быть__proto__Доступ к прототипу прототипа, например, есть конструктор Person и "наследовать" первый есть конструктор People, а затем новый People получает экземпляр p

При доступе к несобственному свойству в p он пройдет__proto__Серия прототипов, соединенных мостом, прототипы прототипов, прототипы прототипов прототипов до конструктора объекта.

Цепочка отношений, сформированная этим поисковым процессом, является цепочкой прототипов.

20190314144733.png

Как показано ниже:

20190314145239.png

Если вы видите значение null, поиск по цепочке прототипов ищет значение null, а если вы не можете найти доступное свойство, оно не существует:

20190314145540.png

Выше это отношения между прототипом, цепочкой прототипов, конструктором, экземпляром, нулем.