我有以下脚本:
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____属性,但在这种情况下有什么问题?
谢谢。
答案 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)
)。