Прототипы, наследование 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 полностью, а добавлять к нему свойства по одному.
Какие методы доступны у нового объекта, созданного с помощью new Object() или литерала {}?
У нового объекта есть доступ ко всем методам объектов, которые берутся из Object.prototype.
Как связан объект с его прототипом?
При создании нового объекта его [[Prototype]] ссылается на прототип, указанный в конструкторе, или на Object.prototype для литералов.
Какое значение имеет свойство __proto__ у объекта Object.prototype?
У Object.prototype свойство __proto__ имеет значение null, так как он не имеет своего прототипа.
Какие объекты хранят свои методы в прототипах?
Объекты, такие как Array, Date, Function и другие, хранят свои методы в прототипах.
Что становится прототипом при создании массива?
При создании массива, его прототипом становится Array.prototype.
Какой объект находится выше всех в иерархии встроенных прототипов?
В иерархии встроенных прототипов выше всех находится Object.prototype.
Почему говорят, что все наследуется от объектов?
Говорят, что все наследуется от объектов, потому что Object.prototype является самым верхним объектом в иерархии встроенных прототипов, а все другие объекты наследуют его свойства и методы.