0

したがって、次の形式の一般的な JavaScript コレクションがあります。

function populateCollection(){
    var Collection = new Array();
    Collection['A'] = 'Awesome';
    Collection['B'] = 'Better';
    Collection['C'] = 'Cool';
    return Collection;
}

ファイル内(CommonLib.jsと呼ばれるとしましょう)。

ここで、このファイルを共通ライブラリとして保持し、いくつかの異なる JS ドキュメントからアクセスできるようにしたいとします (ライブラリが非常に大きいと仮定します)。

jsDoc1.js などと呼ばれるドキュメントからこのコレクションを反復処理するにはどうすればよいでしょうか?

私はそれを試してみました:

<!DOCTYPE html>
<html lang="en">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script>
function dropdown() { 
    for(var i in languageCollection){
        alert(i);
    }
}
<script>
<body>
<input type="text" name="example" id="color" onclick="dropdown()">
</body>

しかし、languageCollection が定義されていないというエラーが引き続き発生します。私はjscriptとjqueryに非常に慣れていません...何かアドバイスはありますか?

ありがとうございました!

4

1 に答える 1

4

コレクションにファイルを含めません。次のステートメントを挿入します。

 <script src="/path/to/CommonLib.js"></script>

さらに、コレクションを返す関数を定義しているだけで、そのためのグローバルオブジェクトはありません。したがって、最初にその関数を呼び出す必要があります。たとえば、

var myCol = populateCollection();

その後、次のようにアクセスできます。

for ( var i in myCol ) {
  if( myCol.hasOwnProperty( i ) {
    // do your stuff
    alert( i );
  }
}

または、関数を変更して、すべてのスコープから見えるグローバル変数を使用することもできます。

function populateCollection(){
    window.myNamespace = window.myNamespace  || {};
    window.myNamespace.Collection = {};
    window.myNamespace.Collection['A'] = 'Awesome';
    window.myNamespace.Collection['B'] = 'Better';
    window.myNamespace.Collection['C'] = 'Cool';
}

ちなみに、配列をオブジェクトのように使用しています。それを正当化する他の側面がない場合は、関数を次のように変更します。

function populateCollection(){
    return {
      'A': 'Awesome',
      'B': 'Better';
      'C': 'Cool'
    };
}
于 2012-06-05T14:46:31.867 に答える