標準のJavascriptではイベントキューに直接アクセスできません。イベントを聴くことができます(多くの場合、.addEventListener()
またはコールバックを登録して、そのターンにイベントが発生し、コールバックが呼び出される)か、または一部のリスナーを.removeEventListener()
で削除するか、特定の操作を取り消すことができます(clearTimeout()
)、しかし、イベントキューの管理に直接アクセスすることはできません。
これを行うためには、どうやらネイティブコードをVM内部に持たなければならないでしょうし、それを行う方法は非標準で、特定のJavascript VM
コールバックが2回以上呼び出されないようにしたい場合は、少しスタブを作成してください。
function callOnce(fn) {
var called = false;
return function() {
if (!called) {
called = true;
return fn.apply(this, arguments);
}
}
}
// create a callOnce function stub for myFunction
var cb = callOnce(myFunction);
obj1.addEventListener("click", cb);
obj2.addEventListener("click", cb);
obj3.addEventListener("click", cb);
myFunction
は、最初のイベントが呼び出すたびに1度だけ呼び出されます。その後、cb
が定義されたときに作成されたcallOnceスタブによってブロックされます。
?_確かに、[にremoveEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener) – hindmost
これをやりたいユースケースを教えてもらえますか? –
コールバックが2回呼び出されるのを防ぐには、コールバックにフラグを追加してコールがすでに呼び出されているかどうかをチェックできますが、それを正しく実行する方法が他にあるかどうかを知りたい場合があります。 – Gooly