为什么getPrototypeOf()在JavaScript中返回错误的构造函数?

时间:2015-05-04 15:33:42

标签: javascript prototype

var protoRabbit = {size: "small"};
var fastRabbit = Object.create(protoRabbit);
console.log(Object.getPrototypeOf(fastRabbit));

以上代码段打印:

  

对象{size:“small”}

这不应该打印protoRabbit {size:“small”}吗?我的理解中缺少什么?

2 个答案:

答案 0 :(得分:6)

在对象前面打印的名称是构造函数的名称。您的对象protoRabbit具有构造函数Object,因为您使用对象文字创建此对象:

var protoRabbit = {size: "small"};

如果希望此对象具有不同的构造函数,则必须使用自己的构造函数:

function Constr() {
    this.size = "small";
}
var protoRabbit = new Constr();
var fastRabbit = Object.create(protoRabbit);
console.log(Object.getPrototypeOf(fastRabbit)); //Constr { size: "small" }

修改

我必须同意Demurgos'回答,console.log(obj);的结果取决于浏览器的实现。因此,从浏览器到浏览器可能会有所不同,并且(显然)有时甚至会在一个浏览器中变化(Programming Best Practices - ADF Faces & JavaScript)。

答案 1 :(得分:1)

控制台中显示的名称不是标准名称。每个浏览器都可以在打印对象时在其控制台中提供最佳上下文。事实是,对象包含正确的属性,而这正是我们真正需要的。