05 Модуль -- 03 Прототипы Flashcards
Если один объект имеет специальную ссылку в поле __proto__ на другой объект, то при чтении свойства из него, если искомое свойство отсутствует в самом объекте, оно ищется в объекте
в другом объекте, на который ссылается __proto__.
Объект, на который указывает ссылка в __proto__,
называется прототипом.
Пример: dog.__proto__ = animal; В данном примере animal это прототип для dog.
Прототип — это резервное хранилище свойств и методов объекта, автоматически используемое при поиске. Как происходит поиск?
Объекты можно организовать в цепочки так, чтобы свойство, не найденное в одном объекте, автоматически искалось бы в другом.
В конце этой цепочки находится null. В случае первого совпадения будет возвращено значение свойства. Если интерпретатор доберется до конца цепочки и не найдет свойства с таким ключом, то вернет undefined.
Для того чтобы правильно задать прототип объекта, можно использовать метод
Object.create(obj), передав параметром obj ссылку на объект который мы хотим сделать прототипом для создаваемого объекта.
Что делает метод obj.hasOwnProperty(prop) ?
метод, который возвращает true, если свойство prop принадлежит самому объекту obj, а не его прототипу, иначе false.
Что вернет метод Object.keys(obj) ?
вернет массив только собственных ключей объекта obj, поэтому рекомендуется использовать именно его.
Так как функция это тоже объект, у каждой функции, кроме стрелочных, есть свойство
prototype, в котором изначально хранится объект с единственным полем constructor, указывающим на саму функцию-конструктор.
При создании объекта через new, в его поле __proto__
записывается ссылка на объект хранящийся в свойстве prototype функции-конструктора.