ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
这些函数允许访问特定的 JavaScript平台功能。它只用于 Haxe编译器目标平台为 JavaScript时,并且总是应该使用 untyped 前缀。 **重要提示**:在使用这些函数之前,确定在Haxe标准库中没有可用的替代。生成的语法无法通过Haxe编译器验证,可在输出中生成无效的或者容易出错的代码。 ## untyped \__js__(expr, params) 注入原生JavaScript表达式(第12.1.3)。它被允许在表达式中使用 {0} ,{1},{2} 等,并使用其余的参数给与 Haxe 字段。如果需要的化,Haxe编译器会留意周围的引号。这个函数也可以返回值。 ~~~ untyped __js__('alert("Haxe is great!")'); // output: alert("Haxe is great!"); var myMessage = "Haxe is great!"; untyped __js__('alert({0})', myMessage); // output: // var myMessage = "Haxe is great!"; // alert(myMessage); var myVar:Bool = untyped __js__('confirm({0})', "Are you sure?"); // output: var myVar = confirm("Are you sure?"); var hexString:String = untyped __js__('({0}).toString({1})', 255, 16); // output: var hexString = (255).toString(16); ~~~ ## untyped \__instanceof__(o,cl) 和JavaScript 中的 `o instanceof cl` 一样。 ~~~ var myString = new String("Haxe is great"); var isString = untyped __instanceof__(myString, String); output: var isString = (myString instanceof String); ~~~ ## untyped \__typeof__(o) 和JavaScript 中的 `typeof o` 一样。 ~~~ var isNodeJS = untyped __typeof__(window) == null; output: var isNodeJS = typeof(window) == null; ~~~ ## untyped \__strict_eq__(a,b) 和JavaScript中的 a===b 一样,用于严格相等测试() Same as a === b in JavaScript, tests on strict equality (三重相等,或一致性)。 ~~~ var a = "0"; var b = 0; var isEqual = untyped __strict_eq__(a, b); output: var isEqual = ((a) === b); ~~~ ## untyped \__strict_neq__(a,b) 和JavaScript中的 a!=b 一样,测试否定的严格相等。 ~~~ var a = "0"; var b = 0; var isntEqual = untyped __strict_neq__(a, b); output: var isntEqual = ((a) !== b); ~~~ ## 表达式注入 在一些情况下,可能需要注入原生JavaScript 代码到 Haxe生成的代码中。通过 \__js\__ 函数,我们可以注入纯JavaScript 代码碎片到输出中。这个代码总是 untyped 类型并且不能被验证,所以它可以在输出中接受无效的代码,这是容易出错的。这可以,比如,编写一个 JavaScript 注释到输出。 ~~~ untyped __js__('// haxe is great!'); ~~~ 更有用的演示是,调用一个函数并使用 \__js__ 函数传递参数。这个例子演示了如何调用这个函数,如何传递参数。注意,代码插值在生成的输出中会在字符串外使用双引号。 ~~~ // Haxe code: var myVar = untyped __js__('myObject.myJavaScriptFunction({0}, {1})', "Mark", 31); ~~~ 这会生成以下的JavaScript代码: ~~~ // JavaScript Code var myVar = myObject.myJavaScriptFunction("Mark", 31); ~~~