2010-12-14 12 views
2

これが私の状況です:javascriptオブジェクトエラー



var r = {"id":"test","files":[],"code":""}; 


var Page = Class.create({ 


initialize: function(json) { 
    this.id = json.id; 
    this.json = json; 

}, 
     start: function() { 
    this.json.files.each(function(x) { 
    var cssResource = this.pageResource(x, 'css'); 
    this.attachCssResource(cssResource); 

    }.bind(this)); 
     }, 

//etc.... 

}); 

var P = new Page(r); 
P.start(); 

こんにちはthis.json.files.eachは関数ではありません持っている...なぜ?

私はプロトタイプ1.7ライブラリを使用します。

私が使用している場合、この


var P = new Page({"id":"test","files":[],"code":""}); 

私はエラーを??持っていません....

+0

[]は、 'each'メソッドを持たない 'オブジェクト'に対する通知ではありません。.eachメソッドを提供する配列の場合、{}でなければならないと思います。 –

+0

@Marvin Smitいいえ、 '[]'は空の配列です。 – Pointy

+0

彼はjQueryではなく、プロトタイプを使っていることに注意してください。 –

答えて

1

あなたがArray.forEachを使用したいと思うでしょう唯一のECMAScript 5のプラットフォームをターゲットにしている場合。

15.4.4.18 Array.prototype.forEach(callbackfn【、thisArg])

callbackfnは3つの引数を受け付ける機能であるべきです。 forEachは配列に存在する各要素に対して、callbackfnを1回、昇順で呼び出します。 callbackfnは、実際に存在する配列の要素に対してのみ呼び出されます。配列の欠損要素のために呼び出されることはありません。

thisArgパラメータが指定されている場合、この値はcallbackfnの各呼び出しでこの値として使用されます。提供されていない場合は未定義が代わりに使用されます。

callbackfnは、要素の値、要素のインデックス、および横断されるオブジェクトの3つの引数で呼び出されます。

forEachは、呼び出されたオブジェクトを直接突然変異させませんが、callbackfnの呼び出しによってオブジェクトを突然変異させることができます。

forEachによって処理される要素の範囲は、最初の呼び出しであるcallbackfnの前に設定されます。 forEachの呼び出し後に配列に追加される要素は、callbackfnでアクセスされません。配列の既存の要素が変更された場合、コールバックに渡される値は、各自がアクセスするときの値になります。 forEachの呼び出しの後に削除され、訪問される前の要素は訪問されません。

+1

彼はプロトタイプを使用しています。これはあらゆる種類のことをネイティブタイプにします。 – Pointy

1

おそらく、あなたが強制的に配列にキャストすることができます:

$A(this.json.files).each(... 

いつかアレイの代わりにの代わりに$Hというハッシュで作業する方が簡単です。

関連する問題