3

Prototype は初めてですが、常に jQuery を使用しています。jQuery と Prototype を使用する必要があるサイトがあります。次のコードに問題があります。

var x = [];
console.log(x);
for (var l in x)
{
console.log(l);
}

このコードを実行すると、x には以下が含まれます。

    各
    各スライス
    全て
    どれか
    収集
    探知
    すべてを見つける
    選択する
    grep
    含む
    メンバー
    inGroupsOf
    注入する
    呼び出す
    最大
    分
    パーティション
    摘み取る
    拒絶
    並び替え
    toArray
    エントリ
    ジップ
    サイズ
    検査する
    探す
    _逆行する
    _各
    クリア
    最初
    過去
    コンパクト
    平らにする
    それなし
    ユニーク
    交わる
    クローン

期待される結果 (プロトタイプなし):

子オブジェクトはありません

Prototype がこれを行う理由と、それを止める方法はありますか?!

ありがとう

4

3 に答える 3

7

配列には使用for...inしないでください。これがまさにその理由です。

for...inオブジェクトのすべてのプロパティをループします。これには、そのプロパティ (この場合は配列インデックス) と、 に追加されたプロパティが含まれますprototype

配列の場合は、通常のforループを使用してください。

var x = [];
console.log(x);
for(var i = 0, len = x.length; i<len; i++){
    console.log(i, x[i]);
}

注:すべての反復ではなく、配列から を 1 回var i = 0, len = x.lengthだけ取得するためです。lengthそれはより速いかもしれません。

于 2012-07-16T14:51:40.210 に答える
5

for..in配列では使用しないでください。使用する必要がありますfor( i=0; i<length; i++)。しかし、それはさておき:

for( l in x) {
    if( x.hasOwnProperty(l)) {
        // l is a property of your object
    }
}

これは基本的に、ループのプロトタイプ チェーンを無視します。

于 2012-07-16T14:52:20.333 に答える
0

を使用すると、数値インデックスだけでなく、配列for ... inの (列挙可能な)プロパティをすべて列挙します。

Prototype.js は多くの新しい関数を追加しArray.prototype、それらを列挙不可としてマークするのに失敗するため、それらはすべてプロパティのリストにも表示されます。

于 2012-07-16T15:07:03.630 に答える