为什么“var derived1 = new Object(base)”将derived1.prototype设置为base?

时间:2013-08-22 18:24:16

标签: javascript prototype prototypal-inheritance object-create

给出以下代码示例:

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

编辑:修正了反映代码的标题

1 个答案:

答案 0 :(得分:1)

new Object(base)Object.create(base)不同。

new Object(x)会将x列入对象。

特别是new Object(base) === base是真的。

有关详细信息,请参阅spec

  
      
  1. 如果提供了价值,那么   
        
    1. 如果Type(value)是Object,那么   
          
      1. 如果值是本机ECMAScript对象,则不要创建新对象,只需返回值。
      2.   
    2.   
  2.