2011-06-29 7 views
0

クロージャと実行コンテキストに問題があるとは思いますが、実際はわかりません。Javascriptのクロージャと実行コンテキスト - 呼び出されたコードの問題

は私がやろうとしている正確に何を説明しましょう、なぜ私は私が持っている方法でそれをコード化されました:

1)私はjavascriptのパワードインタフェースを構築するよ、インタフェースが異なるアプリケーションが含まれています(Iそれらをウィジェットと呼ぶ)。

2)すべてのウィジェットは、移動可能/ドラッグ可能/クローズ可能/サイズ変更可能です。私はデスクトップインターフェースのようなものを実現しようとしていますが、私が得たものは、システム。しかし、それが私が目指しているものです。

3)私はJSコードがこれらのウィジェットのそれぞれをロードする方法を必要としました。私は、インターフェイスがロードされるとき、ウィジェットの名前を見つけるためにPHPスクリプトを呼び出すべきだと決めました。

4)JSコードは各ウィジェットの名前を持ち、別のPHPスクリプトを呼び出すようになりました。このPHPスクリプトは、特定のウィジェットを読み込むためのコードとそれを表示するHTMLコードをフィードバックします。 JSは表示のために要素を画面に追加し、次にウィジェットのJSコードを読み込みます。

5)これは、実際に各ウィジェットのコードをロードし、トリッキーな部分ですが、私はこのようにそれをやった:

var func=new Function(ajax.responseText); 
func(); 

そして、それが正常に動作し、または少なくともに表示されます。

6)オブジェクトと配列に問題があり、実行コンテキストと関係があると思います。

アレイの例:

var myArray=new Array('foo', 'bar', 'fooBar', 'barFoo'); 

私はこれを実行してみました実際の配列(私はそこに何かを間違って入力した場合を除き:)は、私のネットビーンズ・エディタなしで動作することはできません)には問題、私にはOKに見えません別のスクリプトとそれは正常に動作します。 :

実際 alert(myArray[0]);を呼び出すと foo, bar, fooBar, barFooになりますので、私のJSコードは、この配列と便利何もできない

。これが本当に起こるが、それは本当にすべてをいじりている理由はありませんアイデア:foo

アレイ問題が生じalert(myArray[0]);今すぐ。

オブジェクト例:

再び
var myObject=new Object(); 
myObject.a='foo'; 
myObject.b='bar'; 
myObject.c='fooBar'; 
myObject.d='barFoo'; 

、それは自己だで実行すると、オブジェクトが正常に動作します。

オブジェクト問題:

配列と同じように非常に類似した問題が、alert(myObject['a']);を呼び出すと、実際に[object Object],[object Object],[object Object], [object Object] ...

になります...ので、それは配列と同じ問題ですが、それはしても、悪くなります私がalert(myObject.a);(今度は['a']を使用しなかったことに気付く)を呼び出すと、undefinedという結果になります。だから、少し後戻りし、さらにすべてが一緒で結ばれている方法を説明するための

1)JSの負荷が、それは3つのキー(「機能」を含むJSONエンコードされたオブジェクトを返すPHPスクリプトを呼び出します。 、 'JSscript'、 'Other')。各キーには別のjavacriptファイルのソースコードが含まれています。これらはすべて、var func=new Function(ajax.responseText)のような動的に作成された関数を使用してロードされます。

2)次に、これらの新しいjavascriptコードを使用して、別のPHPスクリプトを呼び出して詳細な指示を出します。

3)PHPは動的に作成された関数内で評価され、新しい変数に格納されるJSONで応答します。

4)新しい変数が3つのキーを含むオブジェクト(html, javascript, anotherObject) htmlがドキュメントに追加されました。javscriptは上記のように新しい関数で実行されます。

5)問題は、最後のステートメントで実行されたJS内に存在するオブジェクト/配列にあります。

だから誰でも私を助けてくれればいいと思うし、詳しい説明やコード例が必要ならば、明らかに私は提供することができます。

おかげで、

リチャード

+0

私たちはそのコードを実行することができますか? – tiagoboldt

+0

オブジェクト/配列の作成直後に同じスコープ内で 'alert'関数を呼び出しますか?どのブラウザを使用していますか? –

+1

このような問題はありません。例http://jsfiddle.net/NHhg4/ – Qtax

答えて

0

Ohhhh ..これは閉鎖や他のjavascriptとは関係ないことが分かりました。皆さんを興奮させて申し訳ありません。

これはphpスクリプトによって引き起こされたもので、ajaxリクエストを処理するphpスクリプトでもありませんでした。実際にはjavascriptファイルを読み込んでJSONを実行するスクリプトでした。このスクリプトには、単純なテンプレートシステムのような検索と置換の機能があり、 '[' & ']'の間のすべての単語を見つけることができます。残念ながら、javascript内のどの配列もバングラウドになります。

私はJSのコードでもシステムを使い始めたときに、もともとhtmlテンプレートのためのものだったので、私はfindとreplaceを角括弧で置き換えました。

私のPHPスクリプトはobj[var].descriptionのJSを有効なJSであるobj.descriptionに変更するので、私に気づかせるためのエラーは表示されませんでした。

Ohhhhh。どのような敗者:)

0

は、それはあなたがあなたのAJAX応答テキストを解析していないということでした。

+0

いいえ、コードは正常に解析され、オブジェクトが作成されます。私はオブジェクトをソースに戻すことができます:obj.toSource();再度オブジェクトに戻ります。私も.toSource = ajax.responseTextであることを確認しました – Drahcir

関連する問題