2011-07-20 6 views
1

javascriptコードのリモート部分を取得して実行するrequire/load関数を実装しています。それは正常に動作し、私は基本的にグローバル変数を宣言することでそれを議論するための回避策を使用していますが、私はこの状況で引数を渡す最良の方法が何かを知りたがっていました。ここで私の最初の質問は、moduleNamemoduleName.jsに格納されたコードをフェッチし、動的に実行されたときにどのようなコンテキストでは実行されている引数を指定してjavascript関数(DojoでAjaxを使用)を動的にロードする方法

Module.require = function (moduleName , args){ 
    if (! Module.has(moduleName)){ 
     dojo.xhrGet({ 
      url: 'module.require.php', 
      handleAs: "javascript", 
      content : { 
       module : moduleName 
      }, 
      load: function() { 
      }, 
      error: function(errorMessage) { 
       console.log('there was an error with Module.require()'); 
       console.error(errorMessage); 
      } 
     }); 
    } 
}; 

リモートスクリプトをロードする機能はありますか?それが関数Module.requireの範囲内にある場合、私は容易にargsを参照することができます。グローバルスコープ(window)で実行されている場合、ローカル変数(無名関数呼び出し(function(){}());)を宣言する方法を知っていますが、どのように引数を渡すのですか?すべての引数をサーバーに渡したくないので、これを行う簡単な方法があることを願っています。 PHPで解析するのは難しいだけでなく、潜在的に多くの議論があります。

EDIT:ジェームズKhouryさんは、私が今知っておくべきことをスクリプトが実行上にロードされているどのような状況で、私は引数を渡すf.apply()f.call()を使用する方法を述べました。それが関数の範囲内にある場合、私はそれをf.call(this , args);のように呼び出すことができると思います。私がこれを行うことができれば、とにかく無名関数を呼び出すことはありますか?ユーザーが宣言したすべての変数がローカルであることを保証するためにユーザーコードをラップするモジュールを作成しているので、ラッパー関数もグローバルでないことを確認するのが最善です。

おかげ

答えて

1

私は(これはodetocode.comから取られた)あなたの関数f()で次に

両方function .call and function .apply

になります

function f(message, num, dataObj) 
{ 
    if (this.x) 
    { 
     alert(this.x); 
     // Alternatively you could just do alert(x); 
    } 
    if(arguments.length > 2) 
    { 
     dataObj["message"] = "" 
     for(var i =0; i < num; i++) 
     { 
      dataObj["message"] += message + "\n"; 
     } 
     alert(dataObj.message + "\n" + dataObj.data); 
    } 

} 
+0

ジェームズは、です'フー関数f(message、num。 dataObj) 'typo、またはnumです。 - そこに存在するはずの--space-- dataObj。 – puk

+0

私はこれに関してさらに2つの質問がありますので、 – puk

+0

@pukを編集してオブジェクトにローカル変数を付けてから 'anonFunction.apply(context、arguments)'を実行すると、変数はthis.myVarにアクセスできます'または単に' myVar' ...グローバルスコープで 'widow'は' this'と同じです。 _(はい、ありがたいことです)_ –

関連する問題