0

我有一个数组,它有一个我扔给它的方法,称为add,我将其用作push. 我发现自己push在应该使用的时候使用了几次add,现在我认为将我的add方法的引用分配给数组的 native会很好push。因此,调用push数组将调用add.

内部是否依赖于外部可用的本机方法,例如push?这将如何影响兼容性?这是一个坏主意吗?如果是这样,为什么?

一些代码

PR.state = {
   views: []
};

_.extend(PR.state.views, {

   add: function(view) {
     var parent = view.parent;
     if ((!this.length && view instanceof PR.Views.App) || (parent && _.contains(this, parent)))
       this.push(view);
   }

});

// I am thinking:
PR.state.views.push = PR.state.views.add;
4

2 回答 2

2

我强烈建议不要更改标准数组方法的行为。如果您真的想要一个自定义方法,那么只需创建一个新方法并给它自己的唯一名称并使用它。

改变现有方法的行为可能会产生各种不良后果:

  1. 与从任何其他来源检索的代码不兼容。
  2. 如果其他人曾经在此项目上工作,则会创建一个非标准和意外的实现。这就像添加一个定时炸弹来绊倒一些未来的开发人员。
  3. 训练自己使用自己的自定义方法,而不是.push()一个体面的开发人员会做的事情。去做就对了。
  4. 使用适当的描述性名称创建一个新命名的方法可以提高代码的可读性、可理解性和可维护性。用不同的方法替换现有的方法会适得其反。

如果您只是替换数组的一个实例而不是整个数组原型上的方法,那还不错,但这仍然不是一个好主意。

于 2013-03-14T04:12:07.550 回答
0

多么愚蠢的问题。如果我替换pushadd,那么当我push从调用时会发生什么add?:< :< 我没有测试过,但我怀疑 whileArray.prototype.push仍然可用,除非我Array.prototype.push明确使用,否则调用add将导致 mondo 无限循环。

于 2013-03-14T04:55:44.253 回答