有人建议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
看起来很奇怪。我做错了吗?
答案 0 :(得分:1)
<强> jsFiddle Demo
强>
当您使用Object.create
方法时,它通常也会与构造函数赋值配对。
//...
D.prototype = Object.create(B.prototype);
D.prototype.constructor = D;
//...