2012-03-30 5 views
0

Когда я делаю console.log(someobject), я вижу некоторые объекты в моем объекте, которые содержат в них огромный объем данных.Console.log показывает скрытую информацию об объекте

Если у меня есть много свойств по объектам (свойства, которые также являются объектами), я могу легко получить сотни protos. В любом случае это влияет на производительность каким-либо образом? Должен ли я использовать массивы вместо этого?

+0

массивы и объекты полностью две разные вещи. используйте то, что вам нужно ... – gdoron

+1

Массивы также наследуются от 'Object', поэтому вы ничего не получите в этом отношении. В принципе, все это объект в JavaScript (примитивные типы преобразуются в объекты при доступе к их методам). Это JavaScript. Какая структура данных использовать зависит от ваших данных ... –

+0

хорошо Я использую только объекты, потому что я могу рассматривать их как массивы с ключами – ellabeauty

ответ

1

Это всего лишь часть внутренней прототипной системы JavaScript. Всякий раз, когда создается новый объект, его свойство __proto__ устанавливается в его свойство «родительский» объект prototype. Чтобы ответить на ваш вопрос, он не влияет на производительность, которую вы можете контролировать напрямую, поэтому не беспокойтесь об этом.

Если вы хотите узнать больше о нем, проверьте MDN, https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/Proto

1

Ознакомьтесь с прототипом наследованием JavaScript использует. См., Например, here at MDN.

В двух словах: объекты в JavaScript не создаются путем создания экземпляров классов, а создают объект, похожий на другой объект (прототип). Поэтому каждый объект имеет указатель на его прототип.

Если в какой-то момент кода требуется какой-либо метод или атрибут объекта, компилятор проверяет, обладает ли объект таким свойством (comp. hasOwnProperty()). Если нет, он обращается к соответствующему объекту прототипа. Если свойство не может быть найдено там, он смотрит на прототип прототипа и так далее. Это делается до Object, который является базовым прототипом в JavaScript. Цепь прототипов также называется prototype chain.

Поскольку это неотъемлемая особенность языка, вы никоим образом не обходите его и, следовательно, не окажете какого-либо влияния на производительность вашего конкретного сайта.

1

Это может замедлить вызовы console.log, но не ваше приложение в производственном режиме. В любом случае свойство __proto__ является нестандартным и устаревшим расширением Mozilla, оно будет удалено когда-нибудь, поэтому не беспокойтесь об этом (стандартный метод Object.getPrototypeOf(obj) уже может использоваться вместо obj.__proto__).

Смежные вопросы