Консоль Chrome Javascript: что она выводит в терминах объектов? - PullRequest
3 голосов
/ 02 июля 2011

Из консоли javascript в Chrome:

> function Person(name){this.name=name;}
undefined

На этом этапе Person.prototype должен быть пустым объектом в соответствии со спецификациями Javascript.Давайте назначим его:

> p=Person.prototype
  > Person

Обратите внимание, что> Person можно нажимать, и он расширяется до:

constructor: function Person(name){this.name=name;}
__proto__: Object

Но ... разве это не был пустой объект?Что за лишние вещи?Если вы делаете предупреждение:

alert(p)

Вы получаете [объект объекта].Почему, когда вы набираете его в консоли Chrome, появляется> Person, который расширяется?Разве это не был пустой объект?

Спасибо!

Ответы [ 3 ]

10 голосов
/ 02 июля 2011

Нет, prototype всегда имеет свойство constructor, которое указывает на функцию, прототипом которой он является. И, конечно, он также наследуется от объекта, то есть внутреннего свойства __proto__.

Он определен в ECMAScript 5, раздел 13.2, Создание объектов функций :

(...)

16. Пусть proto будет результатом создания нового объекта, как было бы построено выражением new Object(), где Object - это стандартный встроенный конструктор с таким именем .

17. Вызвать внутренний метод [[DefineOwnProperty]] для proto с аргументами "constructor", Дескриптор свойства {[[Value]]: F , {[[Writable] ]]: true, [[Enumerable]]: false, [[Configurable]]: true} и false.

18. Вызвать внутренний метод [[DefineOwnProperty]] для F с аргументами "prototype", Дескриптор свойства {[[Value]]: proto , {[[Writable] ]]: true, [[Enumerable]]: false, [[Configurable]]: false} и false.

(...)

Это означает не что иное, как:

Создайте новый пустой объект с именем proto (16). Определите свойство constructor для этого объекта и установите значение F (сама функция) (17). Затем определите свойство prototype в функции F и установите для него значение proto .


Если вы alert объект, то объект преобразуется в строку. Поведение по умолчанию заключается в преобразовании объекта в строку [object Object], если только «специальный» метод toString не переопределен.

Консоль Chrome перечисляет эти свойства, потому что она предназначена для отладки, поэтому вам нужна информация. [object Object] не очень информативно.

FWIW, пустой объект выглядит так:

empty object

Вы также можете увидеть внутреннее свойство __proto__ здесь. Пустой объект всегда наследует некоторые свойства по умолчанию, но у него нет собственных свойств.

0 голосов
/ 02 июля 2011

Это методы и свойства, унаследованные от класса Object.

Здесь обсуждаются значения по умолчанию

0 голосов
/ 02 июля 2011

Консоль Chrome - это инструмент для разработчиков. Он предназначен для показа подробной информации. В этом случае вы смотрите на предварительно определенные свойства класса, который вы только что определили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...