Прототипы, наследование Flashcards
Что такое скрытое свойство [[Prototype]] у объектов?
Скрытое свойство [[Prototype]] у объектов - это ссылка на другой объект, который является прототипом, откуда объект наследует свойства и методы.
Как называется процесс, когда JS ищет свойство в объекте и его прототипах?
Это называется прототипное наследование.
Как задать прототип объекту через свойство __proto__?
Можно задать прототип объекту через свойство __proto__, например, obj.__proto__ = prototype, где obj - объект, а prototype - прототип.
Можно ли задать цепочку прототипов для объектов? Если да, то есть ли какие-либо ограничения?
Да, можно задать цепочку прототипов. Однако, ссылки не могут идти по кругу, и значение .__proto__ может быть только объектом или null. Также объект может наследоваться только от одного объекта (один [[Prototype]]).
Что такое __proto__ и как он связан с [[Prototype]]?
__proto__ является геттером/сеттером по отношению к [[Prototype]], но они не являются одним и тем же. __proto__ устарело и рекомендуется использовать методы Object.getPrototypeOf и Object.setPrototypeOf для чтения и записи значения [[Prototype]] соответственно.
Можно ли использовать прототип при записи/удалении свойств объекта?
Нет, прототип используется только для чтения свойств. Операции записи/удаления работают напрямую с объектом.
Как свойство-аксессор обрабатывает операцию записи?
Свойство-аксессор – исключение, так как запись в него обрабатывается сеттером.
Какое значение имеет ключевое слово “this” при вызове метода в JavaScript?
При вызове метода this - всегда объект перед точкой, независимо от того, где находится метод: в объекте или его прототипе.
Что проходит цикл for..in при переборе свойств объекта?
Цикл for..in проходит как по собственным, так и по унаследованным свойствам объекта.
Как получить только собственные ключи объекта?
Можно воспользоваться методом Object.keys(obj), который возвращает только собственные ключи объекта.
Как отфильтровать собственные и унаследованные свойства объекта?
Можно воспользоваться методом obj.hasOwnProperty(key), который возвращает true, если key является собственным свойством obj, и false, если свойство унаследовано.
Почему в цикле for..in не проходят свойства из Object.prototype?
Все свойства в Object.prototype имеют флаг enumerable, установленный в false, что делает их неперечисляемыми.
Какой эффект имеет установка F.prototype на объект, созданный с помощью new F()?
Установка F.prototype на объект, созданный с помощью new F(), делает объект, на котором вызывается new F(), наследником объекта, который был установлен в F.prototype в момент вызова конструктора F.
Можно ли изменить F.prototype после создания объектов с помощью new F()?
Да. Однако изменение F.prototype не повлияет на уже созданные объекты, они будут продолжать ссылаться на старый объект в качестве [[Prototype]].
Какие свойства есть у свойства по умолчанию в объекте prototype у функций-конструкторов?
У свойства prototype по умолчанию у функций-конструкторов есть единственное свойство constructor, которое ссылается на саму функцию-конструктор.
Что произойдет, если изменить свойство prototype функции-конструктора?
Если свойство prototype функции-конструктора будет изменено, то свойство constructor может быть потеряно у объектов, созданных с помощью new.
Как избежать потери свойства constructor при изменении свойства prototype функции-конструктора?
Чтобы избежать потери свойства constructor при изменении свойства prototype функции-конструктора, его можно заново создать или не перезаписывать prototype полностью, а добавлять к нему свойства по одному.