4

私は小さなjQueryのようなライブラリを作成していますが、奇妙なことに、の動作が1つあり$.eachます。

javascriptにはfor...inループがあります:

for (var key in obj) {
    console.log(key + ': ' + obj[key]);
}

これに伴う問題は、継承されたプロパティ、つまりオブジェクトコンストラクタのプロトタイプからのプロパティも繰り返されることです。

hasOwnPropertyたとえば、これを使用してこれを知ることができます。そして、jQueryはそれを行うことができます。

ただし、オブジェクトをに渡すと、オブジェクトはとまったく同じよう$.eachに動作し、継承されたプロパティも繰り返し処理されます。また、わずかに遅くなるはずであり、入力するにはさらに数文字が必要です。for...in

このフィドルをチェックして実際の動作を確認し、ここでのソースコードを探してください$.each

だから私の質問は、独自のプロパティのみを含むjQueryのオブジェクト反復メソッドはありますか?そうでない場合、ライブラリはこのように動作する必要がありますか?

編集: jQueryはこれを行わないので、これが役立つかどうかも答えることができます。つまり、プロトタイプのプロパティを繰り返し処理したいと思っていることはわかりませんが、何かが足りないのかもしれません。

4

1 に答える 1

1

ループにhasOwnPropertyチェックを追加するかどうかをいつでも選択できるため、jQueryの動作は理にかなっています。

継承されたプロパティをループすることは、一部のシナリオ(クローン作成、サブクラス、またはそれを呼び出すもの)で役立つ可能性があることがわかります。

于 2012-12-03T17:35:20.083 に答える