如何才能在ES2015中實現Node的emitter.removeListener?添加一個回調到一個數組很簡單:從array/object /設置
let callbacks = [];
function registerCallback(handler) {
callbacks.push(handler);
});
如何特定功能被刪除後,沒有返回registerCallback some identifier for the function?換句話說,unregisterCallback(handler)
不應該需要任何其他參數,並應該刪除該處理程序。 unregisterCallback
將如何檢查之前是否添加了匿名函數?
正在運行handler.toString()
(以及可能的哈希函數)爲函數創建標識符的可靠解決方案?或者unregisterCallback
如何通過callbacks
迭代去除那個特定元素? (或者找到在一個集的對象或功能相應的鍵。)
mySet.add(function foo() { return 'a'})
mySet.has(function foo() { return 'a'}) // false
感謝。將函數本身用作密鑰也適用於Set。 –
有趣的是,'setTimeout()'和'setInterval()'返回一個標識符,而不是'clearTimeout()'和'clearInterval()'具有相同的功能。 –
@DanDascalescu是的,這很有趣。這可能是由於這些功能是在[作爲一等公民的功能]之前設計的(https://en.wikipedia.org/wiki/First-class_function),因此JavaScript的性質在文化上顯而易見。 JavaScript最初設計得非常快,許多最初的設計都可以追溯到那個領域內糟糕的Java。這也可能是實施泄漏的情況。 –