obj['e'+type+fn](window.event);
配列が実際に "OBJ [...]" 表記を使用できますが、そうJavaScriptで任意のオブジェクトは、次のことができますので、もう一度、彼は言っています。この場合、Resigはすべてのオブジェクト、特にDOMオブジェクト用にプロパティを追加しています。
obj['aVar']
は、obj.aVar
に相当します。前者の利点は、JavaScriptで特別な意味を持つように予約されているキーワードでも機能できることです(例:、obj ['var']オブジェクトに "var"というプロパティを定義した場合)、プロパティ名に動的にアクセスすることができます。 type
は変数なのでobj.type
を実行することができませんでした。これは正確に "type"という名前のプロパティを見つけて、type
という変数に等しい名前のプロパティを見つけられないためです。
オブジェクト(または配列)は関数をデータとして保持できるため、オブジェクトや配列の内部にある関数の呼び出し演算子(括弧にマッチするもの)を使用することもできます。オブジェクトに以前に格納された「メソッド」または関数である)を呼び出し、次にwindow.event
オブジェクトを単一の引数として呼び出す。
ファンクションには、プロトタイプに組み込みのtoString
メソッドがあります(このような場合は、文字列を連結している場所で呼び出されるため、文字列が必要です。あなた自身のtoString
メソッドもあなたの関数にあります。関数もJavaScriptのオブジェクトですから! Resigのコードはこれを利用して新しいプロパティを定義していますが、これは通常は悪い考えですが、他のアプリケーションと衝突する可能性はほとんどありません。
のでdocument.body
がobj
とtype
変数は「FN」を「クリック」とするように設定されている場合function() {alert('boo!');}"
に設定されている場合、それは実際に({)(eloadfunction」として警戒をdocument.bodyオブジェクトのプロパティに名前を付けます'ブー!');} "。彼が説明するように、このプロパティを作成して(そしてそれを自分の無名関数の中で呼び出す)、その内部で使用される "this"キーワードの通常の振る舞いで関数を呼び出すことができます。this
は親オブジェクトを参照しますobj
であり、グローバルではありません(obj
がグローバルでない場合、つまりwindow
オブジェクト)。
「obj.esome_typesome_function(window.event)」のようなものを実行するのと同じですが、あなたが尋ねる表記法では、プロパティ名を動的に構成することができます。 –
@Hans Engel:まったく –