我试图执行一个样本来理解继承。 B级继承自A. 成功执行的示例必须显示两个警报..
但是没有工作.. 我以MDN为例。
代码如下
function A(a){
this.varA =a;
}
A.prototype={
varA:null,
doSomething:function(){
alert( "A invoked");
}
}
function B(a,b){
A.call(this,arguments);
this.varB = b;
}
B.prototype = Object.create(A.prototype,
varB : {
value: null,
enumerable: true,
configurable: true,
writable: true
},
doSomething:{
value:function(){
A.prototype.doSomething.apply(this,arguments);
alert("B invoked);
},
enumerable:true,
configurable:true,
writable:true
});
var a =new A(1);
a.doSomething( );
var b = new B(1,2);
b.doSomething( );
答案 0 :(得分:0)
您错过了此行"
alert("B invoked);
修改强>:
我在这里更新了你的小提琴:http://jsfiddle.net/LmUXw/31/
你有一些拼写错误/语法错误。我建议您使用开发人员控制台(Chrome中的F12
,然后按console
标签)并查看记录到它的错误。如果单击行号链接,它将在控制台窗口中显示它,您可以看到导致问题的行。
答案 1 :(得分:0)
我最初整理了代码,但是我已经推回了我的更改,因为在整理过程中我修复了其中一个错误!
错误是:
alert("B invoked);
需要关闭"
Object.create
来电中,您遗漏了声明对象字面值的{}
。代码应为:
B.prototype = Object.create(A.prototype, {
varB: {
value: null,
enumerable: true,
configurable: true,
writable: true
},
doSomething: {
value: function () {
A.prototype.doSomething.apply(this, arguments);
alert("B invoked");
},
enumerable: true,
configurable: true,
writable: true
}
});
请注意,此代码比您的代码更整洁。体面缩进和格式化(以及语法突出显示)对理解代码和错误有很大的不同。