覆盖array.push Coffeescript

时间:2013-10-15 16:51:37

标签: javascript arrays coffeescript

首先,由于递归的无限循环,下面的代码不会发生。我试图覆盖数组上的推送功能。使用Coffeescript我希望能够推送具有ID的对象,并确保它们在添加到阵列之前是唯一的。问题是我无法找到我应该添加此对象的变量。

如何将对象添加到超级数组?

class SpecialArray extends Array
  Array::push = (arg) ->
    added = $.grep @, (item) ->
        if item
           item.id == arg.id
    if added <= 0
      @push.call(@,arg) // won't work due to loop

运行这段代码时出现的错误: enter image description here

1 个答案:

答案 0 :(得分:0)

你永远不应该覆盖Array::push。在你的情况下,你甚至可以递归地调用它。

我认为你正在寻找

class SpecialArray extends Array
  constructor: () ->
    ref = super
    ref.push = push
    ref
  push = (arg) ->
    unless !arg.id or arg.id in (item.id for item in @)
      Array::push arg

compile

请注意,new SpecialArray不是instanceof SpecialArray,而是普通Array,并且它被覆盖的push方法无法处理多个参数。