确切地说,我正在用Javascript、CoffeeScript和jQuery编写一个程序。我有一个功能,当它们从网络进入时,将它们添加到队列中。我想要的是当某个事件被添加到这个队列中时,告诉另一个函数开始从队列中删除项目。这样做的好方法是什么?
类似的东西可以工作:
var Queue = {
listeners: [],
objs: [],
add: function(item) {
objs.push(item);
$.each(listeners, function() {
listeners.added(item);
});
}
};
或者您可以从Array继承,只需重新实现所需的函数(constructor
和push
)
class Queue extends Array
constructor : (args...) ->
@_listeners = []
super(args...)
onAdd : (fn) ->
@_listeners.push fn
push : (args...) ->
fn(args...) for fn in @_listeners
super(args...)
# Use it like this :
q = new Queue
q.onAdd (args...) -> console.log("l1", args)
q.onAdd (args...) -> console.log("l2", args)
q.push(32)
q.push(52)
console.log '-'
for v in q
console.log v
# Output :
#
# l1 [ 32 ]
# l2 [ 32 ]
# l1 [ 52 ]
# l2 [ 52 ]
# -
# 32
# 52