2011-07-08 7 views
1

奇妙な!jsスコープとプロパティの列挙

私はJavaScriptを使ってMoodleのプラグインを開発中です。私はjsの専門家ではなく、ちょうど始めています。

console.log(M.core_filepicker.instances); 
    for (var clientid in M.core_filepicker.instances) { 
     console.log(M.core_filepicker.instances[clientid]); 
    } 

にconsole.logビット出力、これを:私はと呼ばれる取得されたオブジェクト上の関数内でいくつかのデバッグコードを持って

Object 
4e16f16a0dc14: FilePickerHelper 
4e16f16a1837e: FilePickerHelper 
4e16f16a03933: FilePickerHelper 
4e16f169cd12c: FilePickerHelper 
4e16f169d70e0: FilePickerHelper 
4e16f169e2466: FilePickerHelper 
4e16f169ed42e: FilePickerHelper 

プロパティキー4e16 ...などとアン「オブジェクト」 FilePickerHelper型のこれらのプロパティの値。

しかし、forループは実行されません。

面白いのは、他のスコープで実行され、プロパティを反復処理することです。私のブラウザのデバッグコンソールや他の機能の中で。なぜこのようになるのか理解できません。ジェイミー

+0

あなたは 'Object'は最初' log'声明と 'FilePickerHelper'sのプリントアウトではないと確信しているから来ますループ?ループ内に 'alert( 'hey')'を追加してください。 –

+0

はい、最初のログ呼び出しでFilePickerHelpersが出力されていることを確認してください。 – jamiep

+0

あなたのオブジェクトが次のように見えるのは本当に面白いでしょう: '{prop:" 4e16f16a0dc14:FilePickerHelper "、prop2:" 4e16f16a1837e:FilePickerHelper "など}' – Lapple

答えて

0

私はうまくいけば、正しくここに起こっていたこの質問に反芻し続け、解決:http://moodle.org/mod/forum/discuss.php?d=180893

+0

あなたがここで発見したものを広げて、正しいと思われる場合は回答を受け入れるようにしてください。 –

+0

FirefoxとChromeの両方で見つかったのですが、Chromeのconsole.logの方が信頼性の高いアプリですクロージャーとスコープチェーン。 console.logは、呼び出されたときに渡された変数の値を常に表示するとは限りません。後で値を表示することがあります。たとえば、Chromeで試してみてください: 'test = {}; console.log(テスト); test.hello1 = "hello"; – jamiep

+0

ブレイクポイントを使用して関心のあるポイントでコードを停止し、変数の内容を表示することは信頼できると思われますが、 – jamiep

0
for (var i = 0; i < myArray.length; i++) 

for (var i in myArray) 

は異なる構築されています。ループ内のコードが最初のタイプのものを好むでしょう。

for (var instance in M.core_filepicker.instances) { 
     console.log(instance); 
    } 

はあなたに何を与えるのでしょうか?

(PS(hasOwnPropertyをを認識する)にするために行うことができます。)

+0

'for(var instance in M.core_filepicker.instances){ console.log(インスタンス); '4e16f169cd12c 4e16f169d70e0 4e16f169e2466 4e16f169ed42e 4e16f16a03933 4e16f16a0dc14 4e16f16a1837e' – jamiep

+0

をしかし、奇妙なことは、私は関数の中で、私はそれにそれを使用したいことを入れたときにということである。 }' コンソールで実行できますconsole.log(M.core_filepicker.instances)でも、何も出力しません。同じ場所で使用されたときに7つのプロパティを出力します。 – jamiep

0

あなたのforループの正しい特性を出力するが、任意の順序で。 Javascriptでは、繰り返しのプロパティは順序を指定しません。

+0

いいえ、forループは実行されません。あなたが見ている最初の行の出力です。 – jamiep

関連する問題