为什么浏览器显示原型属性不同?

时间:2015-03-08 17:10:30

标签: javascript

我有以下脚本:

var Person = function (name) {
this.name = name;
};

var person = new Person('James');
console.log(person.name);

var anotherPerson = new Person('Kate');
console.log(anotherPerson.name);

console.log(Person.prototype);
Chrome中的

和控制台向我显示以下内容:

James
Kate
Person {}

而Mozilla的控制台显示

James
Kate
Object {}

我认为最后一个变种是正确的。那么为什么Chrome会出现这个问题呢?我已经读过不同的浏览器以不同的方式实现____proto____属性,但在这种情况下有什么问题?

谢谢。

2 个答案:

答案 0 :(得分:2)

console.log()不是标准。每个浏览器都有自己想要显示的实现。在您的情况下,Chrome已经采取了额外步骤,注意它可以向您显示的信息不仅仅是对象的普通Javascript类型,而且Firefox没有做额外的工作。

如果你正在寻找一个理性的理由,为什么其中任何一个人正在做它正在做的事情,我怀疑你是否会找到一个。这只是实施方面的差异。两者都不对。一个是试图向您展示更多信息。这两个实现只是做出了不同的选择。

答案 1 :(得分:1)

如果您希望Firefox(有时是Chrome)显示构造函数的名称,则不要将Person设置为匿名(未命名)函数。以下将显示Person:

var Person = function Person(name) {//named function
  this.name = name;
};
console.log(Person.prototype);

为什么浏览器显示console.log已经回答了不同的事情(实现取决于浏览器)。 Chrome会显示一个空对象,因为它就是这样。如果对象具有太多要在一行中显示的属性,您还可以在控制台中展开它(尝试console.log(Array.prototype))。