2014-01-14 2 views
0

Если я запускаю следующее:Почему console.log() только печатает поля элемента?

var T = function(x, y) { 
    this.x = x; 
    this.y = y; 
} 

T.prototype.foo = function() { 
    console.log("test"); 
} 

var o = new T(7,4); 

o.foo(); 
console.log(o); 

с помощью node я получаю:

test 
{x: 7, y: 4} 

но если я запускаю его в хроме я получаю:

test 
T {x: 7, y: 4, foo: function} 

Является ли это изменение реализация метода log() или почему методы prototype игнорируются в результате вывода? Если это не просто случай реализации log(), означает ли это, что было бы безопасно сохранять объекты, содержащие оба поля и методы, в mongodb, если вы только хотели сохранить эти поля, т. Е. Можете ли вы полагаться на методы, которые не рассматриваются?

+0

Sry, на самом деле это не дубликат. Причина непечатаемых свойств совсем другая: -/Если вообще, это должно быть отмечено как дубликат [Почему console.log() не отображается унаследованным свойства из Object.create?] (http://stackoverflow.com/q/13300863/1048572), который, однако, не имеет хороших ответов. – Bergi

ответ

4

console.log реализован по-разному в разных условиях. И это потому, что то, что оно делает, имеет смысл только в контексте инструментов, с которыми его результат просматривается. В Chrome у вас есть инспектор и может просверлить объект. В узле он выводит текст в командную строку, где у вас гораздо меньше возможностей.

Это чисто деталь реализации в console.log и вы должны не использовать разность реализаций предполагать что-либо о том, как свойства объекта работают в других контекстах, как сказать ... писать объекты MongoDB.

1

Это просто разница в реализации журнала (на самом деле, это точно разница проверки).

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