命名空间QScriptEngine扩展

时间:2011-07-13 16:01:13

标签: javascript qt plugins qtscript

有人可以向我解释如何在QScriptEngine扩展中获取命名空间吗?我已经设置了所以我在脚本/下有一个目录foo /,正在执行__init __。js文件。

__setupPackage__(__extension__);
print(__extension__);

hello = function() { return 5; };

在我的C ++代码中:           engine.evaluate( “你好();”); //工作正常

所以我的问题是,文件层次结构的重点是foo / bar / whatever(foo.bar.whatever),如果它们都被集成到全局命名空间中?我已经看到了一些例子,他们试图在代码中创建一个命名空间,但是我似乎无法在没有编译器错误的情况下工作。

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

和我的C ++代码:

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

我是否误解了Qt处理命名空间的方式?无论从哪个文件中取出,一切都应该被捣碎到全局范围内吗?是否有适当的示例来创建这些类型的命名空间?谢谢。

3 个答案:

答案 0 :(得分:0)

JavaScript中不存在命名空间(如C ++等语言中所知)。在JS中获得类似命名空间的行为的唯一方法是将东西封装在一个对象中,其中对象的名称定义了命名空间

这个例子将在JS中创建一个'namespace'foo,包含一个方法'bar',以及一个包含方法'hello'的命名空间'foo.baz':

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

希望这会对你有所帮助。

答案 1 :(得分: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,但它有几个优点,因为它可以保护你的代码免受可能试图改变窗口值或未定义的恶意代码。

我不确定这是否完全回答了你的问题,但我希望它有所帮助!

答案 2 :(得分: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