javascript - 使用自定义方法替换 native 对象(数组)方法 : Is it safe? 兼容吗?

标签 javascript

我有一个数组,它有一个名为 add 的方法,我将其用作 push 的包装器。我发现自己在应该使用 add 的时候使用了 push 几次,现在我想为我的 分配一个引用会很好将方法添加到数组的 native push中。因此,在数组上调用 push 将调用 add

内部是否依赖于外部可用的 native 方法,例如 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;

最佳答案

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

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

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

如果您只替换数组的一个实例上的方法,而不是整个数组原型(prototype),这也不算太糟糕,但这仍然不是一个好主意。

关于javascript - 使用自定义方法替换 native 对象(数组)方法 : Is it safe? 兼容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15400785/

相关文章:

javascript - 通过 AJAX 验证用户身份的最简单安全方法是什么?

javascript - 如何让我的查询读取字母(Ñ)

javascript - html5/css/js 制作复杂的基于模块的软件平台(逃离 Adob​​e Flash)

javascript - 自定义 IonicModal 未隐藏在正确位置

javascript - 事件循环是否与 JS 主线程在同一线程上运行?

javascript - Google map 重绘时会触发什么事件?

javascript - 在javascript中动态构建json不起作用

javascript - Protractor 进度输出

javascript - 确定弹出窗口的关闭方式

javascript - 如何使用 Highcharts 在悬停时显示多个数据?