请参阅 - http://jsfiddle.net/sf4oaxun/
function a() {
this.say = function () {
alert("hello");
};
}
a.prototype.what = function () {
alert("234234");
};
function b() {}
//b.prototype = Object.create(a);
//b.prototype = a;
var b1 = new b();
b1.say();
为什么说没有被调用,并且在使用任何一条注释行时都会出错(请取消注释)
b.prototype = Object.create(a);
b.prototype = a;
答案 0 :(得分:1)
say
仅在函数a的构造函数中可用。它不会被继承。
这就是为什么b1.say()不可用的原因。
另一件事,这两个陈述都是错误的。
应该是
b.prototype = Object.create(a.prototype)
以便b。
继承what
属性
另一种做法是
b.prototype = a.prototype
但在这种情况下,对b.prototype
的任何更改都会影响a.prototype
如果你想继承构造函数属性,那么
b.prototype = new a();
<强> DEMO 强>
答案 1 :(得分:0)
当您使用Object.create时,原型会被覆盖,但您的构造函数永远不会运行。这是原A&#34;类&#34;中的代码。没有正在执行。要让b1同时说出什么,你会做什么
b.prototype = new a();