Что первично Object или {}?
Я короче, запутался, вначале тема была о другом, и заголовок тоже. Я мальца запутался в сабже, отредактировал все, и название темы и содержание.
|
Всё логично.
{} - это литеральная форма создания нового объекта, т.е. можно записать так: new Object() У этого инстанса установлен прототипом объект из Object.prototype, т.е. Object.prototype == {}.__proto__ // true Чтобы не было путаницы в голове, то следует усвоить, что у функций есть свойство prototype, которое декларирует ссылку на объект, который будет установлен как прототип для нового объекта, который будет создан через new функцияКонструктор. *** Object.__proto__! = {} Потому что Object - это функция и Object.__proto__ == Function.prototype |
Черт, я вовсем запутался.
|
Цитата:
Цитата:
|
Цитата:
Касательной конструкторов, то http://dmitrysoshnikov.com/ecmascrip...e/#konstruktor *** Если описывать кратко, то функции в JS - это тоже объекты, но логично, что у них есть свои отличительные особенности, например служебный метод [[call]] и т.д. поэтому прототип функции легко представить как: Function.prototype = { __proto__: Object.prototype, call: ..., // не путать с [[call]] apply: ..., bind: ..., [[call]]: ..., [[constructor]]: ... и т.д. } Function.prototype.__proto__ === Object.prototype // true |
kobezzza,
Короче, тысячу извинений, я уже дважды обновил. В голове крутиться вопрос, а сформулировать не могу нормально. В общем, из Вашего ответа я сделал следующие выводы. Object -- это функция, возвращающая пустой объект. Когда мы пишем литеральную форму, это сахар для вызова Object так получается? То есть, под капотом у нас обрабатывает все та же Object? Она первична? |
Цитата:
{} // это тоже самое, что и new Object // и этому новому объекту будет установлен Object.prototype Если вызывать функцию без new, то её поведение отлично, но если брать в расчёт именно Object, то тогда он будет выступать в роли фабрики объектов, т.е. Object(1) // -> new Number(1) Object('foo') // -> new String('foo') Цитата:
Цитата:
new Date().__proto.__ == Date.prototype; Date.prototype.__proto__ == Object.prototype; Date.prototype.__proto__.constructor == Object; |
kobezzza,
Огромное спасибо за ответы:) |
Часовой пояс GMT +3, время: 23:27. |