Что первично 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, время: 14:39. |