覆盖默认对象方法而不是添加新方法有什么好处?

时间:2014-01-08 16:02:29

标签: javascript prototype

我正在学习javaScript原型以及如何更改默认方法。 我无法从中看到好处,而不是添加新方法,从而避免了混乱的风险。

猜猜我遗失了什么?

聚苯乙烯。我是编码的新手。

3 个答案:

答案 0 :(得分:2)

编写新方法和覆盖是两回事,一个并不比结束更好。

  • 如果编写新方法,则会向Object添加方法。第三方应用或应用的其他部分应该了解使用它的新方法并使用新方法附带的新功能。

  • 如果覆盖某个方法,第三方仍会像以前一样调用该方法。但是您可以选择更改方法在后台的行为方式,例如,以比先前方法更优化的方式执行此操作,或使用其他数据库。但是你的新方法应该保持与前一个方法相同的行为,因此对于第三方来说,更改是透明的,否则,你会搞砸了。

答案 1 :(得分:1)

这很简单:你无法让人们调用新方法。他们称之为旧的,不会改变。因此,如果您需要知道他们何时致电(这样您可以做某事),您唯一的机会就是覆盖现有方法。

当然,你不能违反现有方法的合同 - 就像任何合同一样,破坏它会让每个人都不高兴(最终甚至是那个做过它的人)。

所以是的,你需要小心,但有很多场合它是最好的工具。是的,添加新方法更安全,更简单。

答案 2 :(得分:1)

是的,你有可能陷入困境。但是看看这个例子:假设你有一个类Shape,它有一个defult方法.get_area,它被定义为引发异常(没有通用的方法来计算区域)。但是如果你有Shape的子类叫Square,那么你已经知道如何计算面积。 Circle等也是如此。但每次你必须为每个形状类型定义一个不同的函数(即每个子类)。

现在,如果您有一组形状,并且想要计算总面积,并且您知道所有这些都是Shape类的子类,那么您可以简单地执行此操作:

var res = 0;
for (var i = 0; i < collection.length; i++) {
    res += collection[i].get_area();
}

很简单。实际上,只要您知道他们有collection方法(名称变得重要)并且返回一个数字,您就不需要了解get_area的元素。

当然,在一天结束时,这取决于你想要达到的目标。