首先,由于递归的无限循环,下面的代码不会发生。我试图覆盖数组上的推送功能。使用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
运行这段代码时出现的错误:
答案 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
方法无法处理多个参数。