2012-02-10 9 views
0

Javascriptを初めて使用しています。私は実際にイベント処理に関するコードに遭遇しています。コードはこちらですJavascriptでのイベント処理に関する混乱

//This generic event handler creates an object called eventHandler 
var etHandler = {}; 

if (document.addEventListener) { 

    //eventHandler object has two methods added to it, add()and remove(), 
    etHandler.add = function(element, eventType, eventFunction) { 

     /** 
     * The add method in each model determines whether the event type is a load event, meaning that 
     * the function needs to be executed on page load. 
     */ 
     if (eventType == "load") { 

      ....... 

     } 
    };// end of eventHandler.add = function() 

    etHandler.remove = function(element, eventType, eventFunction) { 

     element.detachEvent("on" + eventType, eventFunction); 

    }; //end of etHandler.remove = function() 
} 

function sendAlert() { 

    alert("Hello"); 

} //end of sendAlert() 

function startTimer() { 

    var timerID = window.setTimeout(sendAlert,3000); 

}//end of startTimer() 

var mainBody = document.getElementById("mainBody"); 

etHandler.add(mainBody, "load", function() { 

           startTimer(); 

          } 
      ); 

質問があります。空のオブジェクトを作成します。 var etHandler = {};。大丈夫だよ。その後、条件if (document.addEventListener) {}を確認しています。ドキュメントにイベントリスナーを追加しませんでしたが、この条件は真です。なぜこの条件が真実に戻っているのですか? 次に、etHandler.add = function(element, eventType, eventFunction) {}と書きます。なぜ我々はetHandler.addを書いているのですか? etHandlerオブジェクトには、作成時にプロパティがありません。それはヌルオブジェクトです。私たちはこの

var etHandler = { 

    add: function() { 

    }, 

    remove: function(){ 

    } 
}; 

ようetHandler作成した場合はその後、我々はetHandler.addを書くことができます。同様の問題は、etHandler.removeも同じです。

おかげ

答えて

1

コールif (document.addEventListener)は、ブラウザがこのメソッドをサポートしているかどうかチェックしています。ドキュメントオブジェクトにドキュメントが存在するかどうかを確認します。これは機能検出と呼ばれ、ブラウザ間の違いを検出するために頻繁に使用されます。

etHandler.add = function(element, eventType, eventFunction)は、addメソッドを定義し、同時に作成します。それは基本的にあなたの例と同じです。

+0

HHmmフィーチャ検出については読んだが、本では、フィーチャ検出に 'typeof'を使用すると書かれていた。**ブラウザがサポートする を示すgetElementById()メソッドの存在をテストする。より高度なDOMインターフェイスを使用する場合は、次のコードを使用します。** 'if(typeof document.getElementById!=" undefined "){ alert(" getelembyidがサポートされています "); } else {アラート( "no getelembyid support"); } '。また書かれました**あなたはテスト中にtypeofの使用をスキップしたくなるかもしれませんが、 の例題のWebで機能テストが次のように見えるかもしれません:** continue .... – Basit

+0

'if(document。 getElementById){...} '。 **残念ながら、この機能テストの方法は、テストのタイプほど信頼性がありません。問題 は短い構文でメソッドが実行されるということです。 typeofを省略すると、テストされているメソッドまたはプロパティ がデフォルトで0またはfalseを返し、テストが失敗します。言い換えれば、 は、ブラウザがそのメソッドまたはプロパティをサポートしていないように見えます。 したがって、typeofを使用したテストはより安全で信頼性が高くなります。だから私は反論したのです... – Basit

+0

あなたはまた言った** 'etHandler.add = function(element、eventType、eventFunction)'はaddメソッドを定義し、それを同時に作成します。それは基本的にあなたの例と同じです。**あなたはシーンの裏側で言うことを意味し、JavaScriptはこのようなものを作成しますか? 'var etHandler = {add:function(){}、remove:function(){}};'それは? – Basit

関連する問題