2

QScriptEngine 拡張機能で名前空間を取得する方法を誰かに説明してもらえますか? script/ の下にディレクトリ foo/ があり、__init__.js ファイルが実行されるように設定しました。

__setupPackage__(__extension__);
print(__extension__);

hello = function() { return 5; };

私の C++ コードでは: engine.evaluate("hello();"); // 正常に動作します

だから私の質問は、foo/bar/whatever (foo.bar.whatever) のようなファイル階層のポイントは何ですか? コード内で名前空間を作成しようとする例をいくつか見てきましたが、コンパイラ エラーが発生せずにそれを機能させることはできないようです。

      foo = {
          hello : function() { return 5; }
      };

そして私のC++コードでは:

      engine.evaluate("foo.hello();");

Qt が名前空間を処理する方法を誤解していますか? どのファイルから取得されたかに関係なく、実際にすべてをグローバルスコープにマッシュアップする必要がありますか? これらのタイプの名前空間を作成するための適切な例はありますか? ありがとう。

4

3 に答える 3

0

JavaScript では、クロージャを使用して名前空間をシミュレートします。これは、ユーザーに公開したくない名前空間内の特定の関数とプロパティを非表示にする場合にも役立ちます

(function(window, undefined){
  //declare a local object
  myNamespace = {};

  //define private variables
  var privateVar; // this wont be accessable outside of the closure

  var privatefunct = function () {
    alert('I can only be called by functions defined within the closure');
  }

  myNamespace.publicVar = "this can be accessed outside the namespace";

  // this function can be called outside the closure
  myNamespace.getPrivateVar = function() {
    return privateVar;
  }

  //add your local object to the global object (aka. window in the browser)
  window.myNamespace = myNamespace;
})(window)

このパターンは部分的に jQuery から借用されていますが、window または undefined の値を変更しようとする悪意のあるコードからコードを保護するため、いくつかの利点があります。

これがあなたの質問に完全に答えているかどうかはわかりませんが、役に立てば幸いです!

于 2011-07-20T15:17:06.613 に答える
0

名前空間 (C++ などの言語で知られている) は、JavaScript には存在しません。JS で名前空間のような動作を取得する唯一の方法は、オブジェクトの名前が名前空間を定義するオブジェクトに内容をカプセル化することです。

この例では、JS でメソッド「bar」を含む「名前空間」foo と、メソッド「hello」を含む名前空間「foo.baz」を作成します。

var foo = {
    bar : function(){ return 5; },
    baz : {
        hello : function(who){ return 'Hello ' + who + '!'; }
    }
};

これが少し役立つことを願っています。

于 2011-07-19T07:46:11.713 に答える
0

QScriptEngine が JavaScript の実装である場合

var foo = {
          hello : function() { return 5; }
      };

また

var foo = {};
foo.hello = function() { return 5; };

うまく動作する必要があります。それ以外の場合は、発生している構文エラーの正確なテキストを提供してください。

名前空間が必要な場合は、私の TIScript を検討してください: http://www.codeproject.com/KB/recipes/TIScript.aspx

于 2011-07-20T15:43:36.633 に答える