0

首先,由于递归无限循环,下面的代码不会发生。我正在尝试覆盖数组上的推送功能。使用 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

运行这段代码时出现的错误: 在此处输入图像描述

4

1 回答 1

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

编译

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

于 2013-10-15T17:27:23.983 回答