0

jQuery ネイティブ コードから取得した次の式があります。

handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || []

式の最後の部分が変数[]に割り当てられる条件は何ですか? handlersここに私の推測があります:

1) この部分が最初に実行され( jQuery._data( this, "events" ) || {} )ます。添付されたイベントがない場合はjQuery._data( this, "events" ) === undefined、空のオブジェクトが返されます。

2) 次に、この部分{}[event.type] || []を処理します。が定義されていない場合event.type、配列が返され、変数に割り当てられhandlersます。つまり、配列が返されるにevent.typeは未定義で十分ということですか?

私は正しいですか?

4

3 に答える 3

2

それは基本的に正しい

これをやろうとしているだけです。

jQuery._data(this, "events")[event.type] || []

ただし、jQuery._data(this, "events")falsey (未定義) の場合は、{}最初に設定して、[event.type]オブジェクト プロパティ アクセサーが適合しないようにします。


これを書く別の方法は、

handlers = (function(context){
  var events = jQuery._data(context, "events") || {};
  return events[event.type] || [];    
})(this);
于 2013-08-26T08:03:08.073 に答える
1
  • 「イベントが添付されていない場合jQuery._data( this, "events" ) === undefinedは、空のオブジェクトが返されます。」

ほとんどの場合、論理||(OR) は、指定された式 (呼び出しが null、0、または false を返すjQuery._data(this, 'events') || {})場合、空のオブジェクト リテラルに評価されます... 基本的に、任意の偽の値です。_data

  • 「つまり、配列が返されるには、event.type が定義されていないことで十分です」

はい、戻り値jQuery._data(this, 'events')または空のオブジェクトリテラルで未定義であっても (この場合、ほぼ確実に未定義になります)、これは空の配列に評価され、それhandlersが割り当てられます。

なんらかの理由で Object プロトタイプにプロパティを設定した場合:

Object.prototype.click = 'I was set by a madman';

プロパティは、インスタンス上にあるか、プロトタイプ チェーンのさらに上にあるかに関係なく、常に検出されるため、コードがイベント タイプに対して空の配列を返すことはありません。そのため、まれなケースを除いて、ネイティブ プロトタイプには決して触れないでください。それでも、関数以外のプロパティを設定しないでくださいclickclickObject.prototype

于 2013-08-26T08:04:12.300 に答える
1

したがって、配列が返されるには、それで十分であることを意味しevent.typeますundefined

event.typeはい。ただし、オブジェクトにプロパティ名として存在しない値がある場合、配列も返されます。つまり、最初の式が空のオブジェクトに評価される場合、 の任意の値によりevent.type配列が返されます。

例:

({}['click'] || [])
于 2013-08-26T08:02:02.400 に答える