使用Object.create for prototype的原型继承将[Object]作为实例的原型

时间:2015-03-02 20:37:56

标签: javascript

有人建议Derived.prototype = Object.create(Base.prototype);优于Derived.prototype = new Base();(例如this SO answer)。

这是有道理的,但是当我使用这种方法时,就像这样:

function B(){};
B.prototype.doA = function(){};

function D(){};
D.prototype = Object.create(B.prototype);

var d = new D();

console.log(Object.getPrototypeOf(d)); 

它将Object {doA: function}输出到控制台,并且日志console.log(d)显示一个__proto__: Object的对象。为什么不是D {doA: function}

其他一切似乎都有效:

d.doA();
d instanceOf D; // true
d instanceOf B; // true

fiddle

看起来很奇怪。我做错了吗?

1 个答案:

答案 0 :(得分:1)

<强> jsFiddle Demo

当您使用Object.create方法时,它通常也会与构造函数赋值配对。

//...
D.prototype = Object.create(B.prototype);
D.prototype.constructor = D;
//...