给出以下代码示例:
var base = {
one: "one",
two: 2,
test: function() { return "test"; }
};
var derived1 = new Object(base);
function Ctor() { };
Ctor.prototype = base;
var derived2 = new Ctor();
var proto1 = Object.getPrototypeOf(derived1);
var proto2 = Object.getPrototypeOf(derived2);
var isProto1Base = proto1 === base;
var isProto2Base = proto2 === base;
我原本以为isProto1Base和isProto2Base都是真的。但是,isProto1Base === false和isProto2Base === true。那是为什么?
编辑:修正了反映代码的标题
答案 0 :(得分:1)
new Object(base)
与Object.create(base)
不同。
new Object(x)
会将x
列入对象。
特别是new Object(base) === base
是真的。
有关详细信息,请参阅spec:
- 如果提供了价值,那么
醇>
- 如果Type(value)是Object,那么
- 如果值是本机ECMAScript对象,则不要创建新对象,只需返回值。