それらはすべて、同じ結果を生成するという点で「正しい」ものです (element
が DOM ノードであると仮定します)。window
andの利点はdocument
、機能をテストするために要素を作成または検索する必要がないことです。つまり、テストをより効率的に実行できます。
あなたelement
はすぐに利用できると言います:これは、要素を作成し、イベントをそれらにバインドするプラグイン/ライブラリ/モジュールを作成していることを示唆しています。私は、あなたのイベントを別々にフォークすると言います:
次のようなコードがあるかもしれませんが:
function createButton(){
// Create element
var button = document.createElement('input');
// Bind event
if(button.attachEvent){
button.attachEvent('onclick', actionTrigger);
}
else {
button.addEventListener('click', actionTrigger, false);
}
return button;
}
次のように、独自のラッパー関数を作成する方がよい場合があります。
var bindEvent = (function determineEventBinding(){
if(window.attachEvent){
return function attachEvent(element, hook, func){
element.attachEvent('on' + hook, func);
}
}
else {
return function addEventListener(element, hook, func){
element.addEventListener(hook, func, false);
}
}
}());
...そして、関数コードを書くときにラッパーを使用して、頭痛の種をすべて忘れてください:
function createButton(){
// Create element
var button = document.createElement('input');
// Bind event
bindEvent(button, 'click', actionTrigger);
return button;
}
利点は多岐にわたります。
- メソッドを決定するコードは 1 回だけ実行する必要があります
- そのコードは、スクリプトの実行が開始されるとすぐに実行できます — DOM Ready やユーザー CTA のようなパフォーマンスの輻輳ホットスポットの邪魔にならないようにします
- 難解な機能コードを書いている間は、ブラウザの差異をすべて忘れることができ、その結果、コードの読み取りとパフォーマンスが向上します。
- 新しいブラウザの差異をサポートする必要がある場合、または既存のものを修正する必要がある場合は、イベントをバインドするたびにトレースするのではなく、コードを 1 か所で編集できます。