add○○という関数に対してremove○○を用意しない実装
3449 ワード
このコンセプトは、「追加したヤツが責任を持って削除するべき」「追加したヤツのよかり知らぬところで削除させない」という発想に基づいている。
remove 関数を用意する代わりに、add 関数が remove 関数を返す。
以下は CoffeeScript の例。
"use strict"
module.exports = ->
listeners = {}
notifying = {}
return {
addListener: (eName, listener) ->
listeners[eName] ?= []
return (->) if listener in listeners[eName]
listeners[eName].push listener
return -> # remove 関数
i = listeners[eName].indexOf listener
if i >= 0
listeners[eName].splice i, 1
notify: (eName) ->
return if notifying[eName] # 無限ループ防止用
notifying[eName] = true
listener.apply undefined, arguments for listener in (listeners[eName] or [])
notifying[eName] = false
}
Author And Source
この問題について(add○○という関数に対してremove○○を用意しない実装), 我々は、より多くの情報をここで見つけました https://qiita.com/amoO_O/items/b836ac0f846f17a43678著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .