function main()
{
this.one = 1;
}
main.prototype = {
display: function()
{
console.log(this.one);
return this;
}
};
function addition() {
main.call(this);
}
addition.prototype = new main;
addition.prototype.constructor = addition;
addition.prototype = {
add: function(x) {
this.one += x;
return this;
}
};
// addition.prototype.add = function(x)
// {
// this.one += x;
// return this;
// }
display = new addition;
display.add(3).add(5).display();
如果我用上面的addition.prototype替换注释的addition.prototype.add,它将正常工作,记录'9'。否则,运行上面的代码段将导致Firebug 1.4,Firefox 3.5中的“display.add(3).add(5).display不是一个函数”。
两个细分市场有什么区别?我一直认为它们是相同的,请告知差异,或/以及我如何使用注释代码。
或者至少指出我应该谷歌的关键词,我已经尝试了几个小时的徒劳。
感谢。
答案 0 :(得分:4)
看起来你用你的代码覆盖了父母的(主)原型:
addition.prototype = {
add: function(x) {
this.one += x;
return this;
}
};
addition.prototype现在是一个新对象,因为你刚刚分配给它。
当你这样做时:
addition.prototype.add = function(x) {
this.one += x;
return this;
}
您正在向addition.prototype
添加属性,因此您保留了main的继承display()
功能。
顺便问一下,你从哪里得到这段代码?这是我见过的一个比较令人困惑的JavaScript继承示例。