1

Modernizr のタッチ/ノータッチ出力に基づいて、.mouseover イベントと .click イベントのどちらかを選択できるようにしたいと考えています。

if (Modernizr.touch) {
  $(el).click(stuff);
  $(el).click(stuff);
} else {
  $(el).mouseover(stuff);
  $(el).mouseover(stuff);
}

しかし、私はそのすべてを二度書きたくありません。私が呼び出すことができるように何かを定義することは可能ですか:

if (Modernizr.touch) {correctEvent = click} else {correctEvent = mouseover}
$(el).correctEvent(stuff);
$(el).correctEvent(stuff);
4

1 に答える 1

6

はい、これは別のオブジェクト アクセス表記法で簡単です[]

var eventName = Modernizr.touch ? 'click' : 'mouseover';
$(el)[eventName](stuff);

ここで重要なのは、Javascript 関数は第一級オブジェクトであるため、他のオブジェクト プロパティと同じ方法でアクセスできるということです。たとえば、これを行うことができます:

var foo = { bar: 100 };
console.log(foo.bar);
console.log(foo['bar']);

2 つの行は実質的に同じです。

clickとは jQuery 選択のプロパティであるためmouseover、次のようにアクセスできます。たとえば、clickメソッドを$(el)['click'](). 意味はありませんが、あなたならできます。

ここでは、この代替構文を利用して、呼び出す関数が他の要因に依存する場合を処理できます。

編集: これに関する詳細なドキュメントについては、「メンバー オペレーター」に関する MDC ページを参照してください。

于 2011-05-12T22:56:40.227 に答える