0

给定以下代码示例:

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。这是为什么?

编辑:固定标题以反映代码

4

1 回答 1

1

new Object(base)不一样Object.create(base)

new Object(x)将装箱x成一个对象。

尤其new Object(base) === base是真实的。

有关更多详细信息,请参阅规范

  1. 如果提供值,则
    1. 如果 Type(value) 是 Object,那么
      1. 如果该值是原生 ECMAScript 对象,则不要创建新对象而只是返回值。
于 2013-08-22T18:26:29.033 回答