Схематические прототипы и цепочки прототипов
Прототип и цепочка прототипов являются неизбежными точками знаний в JS📕, в этой статье используется форма графической карты разума, чтобы проследить взаимосвязь между такими понятиями, как прототип, цепочка прототипов, экземпляр, конструктор и т. д.🌚
Конструктор конструктор
Во-первых, давайте напишем构造函数
Человек, конструктор, как правило, требует, чтобы первая буква была капитализирована для различения обычных функций:
function Person(){}
прототип
Прототип относится к объекту, а экземпляр «наследует» свойства этого объекта. Свойства, определенные на прототипе, через «наследство», экземпляр также имеет это свойство. Поведение «наследования» реализовано внутри нового оператора.
Не говоря уже об экземпляре, связь между прототипом и конструктором заключается в том, что внутри конструктора есть свойство, называемое прототипом, и через это свойство можно получить доступ к прототипу:
Person — конструктор, Person.prototype — прототип
экземпляр экземпляр
С помощью конструктора мы можем создавать свойства прототипа, которые можно «наследовать», и создавать экземпляры с помощью оператора new.
Допустим, Person, мы хотим создать экземпляр человека, тогда мы можем сделать это с помощью оператора new, а связь между ними проверить через instanceof:
Мы определяем свойство на прототипе, тогда экземпляр также может «наследовать» это свойство:
прото неявный прототип
экземпляр передан__proto__
Доступ к прототипу, поэтому, если это экземпляр, вы можете напрямую получить доступ к прототипу через это свойство:
Поэтому оба эквивалентны:
Конструктор конструктор
Поскольку конструктор получает доступ к прототипу через прототип, прототип также должен каким-то образом получить доступ к конструктору.
Таким образом, отношения между ними должны быть такими:
Обратите внимание, что конструктор здесь является свойством прототипа, а конструктор относится к реальному конструктору. Не путайте два имени 😀
Связь между экземплярами, конструкторами и прототипами
Здесь мы видим, что если экземпляр хочет получить доступ к конструктору, он должен быть:
Нет никаких свойств или методов, напрямую доступных из экземпляра конструктору:
Экземпляры и прототипы через вышеупомянутые__proto__
посещать.
В процессе чтения свойств экземпляра, если свойство не найдено в экземпляре, оно будет следовать за__proto__
Найдите указанный прототип, а если не сможете найти, попробуйте найти прототип прототипа 🐚:
Удаляем комментарий и присваиваем экземпляру атрибут с таким же именем, как видите, напечатанный атрибут указывает на это:
Сеть прототипов
Прототипы также могут быть__proto__
Доступ к прототипу прототипа, например, есть конструктор Person и "наследовать" первый есть конструктор People, а затем новый People получает экземпляр p
При доступе к несобственному свойству в p он пройдет__proto__
Серия прототипов, соединенных мостом, прототипы прототипов, прототипы прототипов прототипов до конструктора объекта.
Цепочка отношений, сформированная этим поисковым процессом, является цепочкой прототипов.
Как показано ниже:
Если вы видите значение null, поиск по цепочке прототипов ищет значение null, а если вы не можете найти доступное свойство, оно не существует:
Выше это отношения между прототипом, цепочкой прототипов, конструктором, экземпляром, нулем.