Javascript原型继承的区别

时间:2009-07-09 08:46:51

标签: javascript inheritance prototype

 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不是一个函数”。

两个细分市场有什么区别?我一直认为它们是相同的,请告知差异,或/以及我如何使用注释代码。

或者至少指出我应该谷歌的关键词,我已经尝试了几个小时的徒劳。

感谢。

1 个答案:

答案 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继承示例。