2011-12-26 11 views
0

私はJavascript配列が実際にオブジェクトであることを知っています。オブジェクトはオブジェクトなので、それらはプロパティを持つことができます。ここに例があります:Javascript配列にプロパティを格納することには何らかの弱点がありますか?

var a = [1, 2, 3]; 
a.currentIndex = 2; 
a.next = function() { ... }; 
a.prev = function() { ... }; 

a.length // returns 3 

これはとても便利なようです。状態やユーティリティの関数を実際の配列自体に格納し、他の変数には格納したくないというさまざまな理由があります。それは、そのオブジェクトに他のものが格納されているオブジェクトのプロパティとして配列を持つよりも優れています。

は、ここに私の質問です:

誰でもJavascript配列のプロパティを保存してすべての問題を知っていますか?それはすべてのブラウザで機能しますか?これがJavascriptの将来のバージョンで変更されるという証拠はありますか?それが良い方法であるかどうかについての一般的な知恵はありますか?

(PS記録のために、私はのために...ループ内での配列を反復処理する必要はありません。私は、このようなループは、同様の特性が含まれることを理解し)

答えて

1

etc

2

すでに支配したので、 for in号の問題を解決するには、私の答えは明確ではありません。心配することはありません。 Array.prototypeメソッドはすべて、「インデックス付き」キー(0 ... n)にのみ適用されます。

ここで最もよく知られているのはよく知られているjQueryライブラリですが、Array-Likeオブジェクトを使ってDOMノードを格納していますが、そのオブジェクトには多くのメソッドがあります(jQueryはプロトタイプを使用しています)。しかし、Zeptoのような他のライブラリは、単にそれらのメソッドを直接 "配列"オブジェクト自体に置きます。

もう一度注意してください。あなたはそれをやるのをやめています。

0

はい、すべてのブラウザで動作します。そしてそれは有効なjavascript(配列はオブジェクトです)です。オブジェクトではなくArrayコンストラクタを使用する理由はいくつか考えられますが、これがあなたの好みのコーディングスタイルであれば、それに合わせてください。 、concatcurrentIndexせずにあなたに新しい「クリーン」な配列を与えるだろう、それが重要だ場合は、「コピー」配列のプロトタイプの機能はいずれも、あなたの余分なプロパティのいずれかをコピーしませんすなわち.splice.slice - ただ、もう一つのことを投げ

関連する問題