企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
可以使Haxe类或静态字段对纯 JavaScript 用法可用。要暴露它们,添加 @:expose 元数据到渴望的类或静态字段。 这个例子暴露了Haxe 类 MyClass。 ~~~ @:expose class MyClass { var name:String; function new(name:String) { this.name = name; } public function foo() { return 'Greetings from $name!'; } } ~~~ 它生成如下的JavaScript 代码: ~~~ (function ($hx_exports) { "use strict"; var MyClass = $hx_exports.MyClass = function(name) { this.name = name; }; MyClass.prototype = { foo: function() { return "Greetings from " + this.name + "!"; } }; })(typeof window != "undefined" ? window : exports); ~~~ 通过传递全局(如 window 或 exports) 作为参数到我们JavaScript模块中的匿名函数,它变的可用,允许暴露Haxe 生成的模块。 在纯JavaScript中现在可以创建一个这个类的实例并调用它的公共函数。 ~~~ // JavaScript code var instance = new MyClass('Mark'); console.log(instance.foo()); // logs a message in the console ~~~ Haxe类的包路径被完全暴露。要重命名类或者为暴露的类定义一个不同的包,使用 @:expose("my.package.MyExternalClass") 。 ## 浅层暴露 当Haxe生成的代码是一个大型 JavaScript项目的一部分,并且封装进一个大的闭包中,并不是总是需要暴露Haxe 类型到全局变量。使用 -D shallow-expose 编译,允许类型或者静态字段只在生成的闭包的范围内可用。 当代码使用 -D shallow-expose 编译,生成的输出看起来如下: ~~~ var $hx_exports = $hx_exports || {}; (function () { "use strict"; var MyClass = $hx_exports.MyClass = function(name) { this.name = name; }; MyClass.prototype = { foo: function() { return "Greetings from " + this.name + "!"; } }; })(); var MyClass = $hx_exports.MyClass; ~~~ 在这种模式下,一个 var 语句 是用来暴露模块;它没有写到 window 或者 exports 对象中。