JavaScript 中调用 Kotlin 方法实例详解
Kotlin 编译器生成正常的 JavaScript 类,可以在 JavaScript 代码中自由地使用的函数和属性 。不过,你应该记住一些微妙的事情。
用独立的 JavaScript 隔离声明
为了防止损坏全局对象,Kotlin 创建一个包含当前模块中所有 Kotlin 声明的对象 。所以如果你把模块命名为 myModule,那么所有的声明都可以通过 myModule 对象在 JavaScript 中可用。例如:
fun foo() = "Hello"
可以在 JavaScript 中这样调用:
alert(myModule.foo());
这不适用于当你将 Kotlin 模块编译为 JavaScript 模块时(关于这点的详细信息请参见 JavaScript 模块)。 在这种情况下,不会有一个包装对象,而是将声明作为相应类型的 JavaScript 模块对外暴露。例如, 对于 CommonJS 的场景,你应该写:
alert(require('myModule').foo());
包结构
Kotlin 将其包结构暴露给 JavaScript,因此除非你在根包中定义声明, 否则必须在 JavaScript 中使用完整限定的名称。例如:
package my.qualified.packagename fun foo() = "Hello"
可以在 JavaScript 中这样调用:
alert(myModule.my.qualified.packagename.foo());
@JsName 注解
在某些情况下(例如为了支持重载),Kotlin 编译器会修饰(mangle) JavaScript 代码中生成的函数和属性的名称。要控制生成的名称,可以使用 @JsName 注解:
// 模块“kjs” class Person(val name: String) { fun hello() { println("Hello $name!") } @JsName("helloWithGreeting") fun hello(greeting: String) { println("$greeting $name!") } }
现在,你可以通过以下方式在 JavaScript 中使用这个类:
var person = new kjs.Person("Dmitry"); // 引用到模块“kjs” person.hello(); // 输出“Hello Dmitry!” person.helloWithGreeting("Servus"); // 输出“Servus Dmitry!”
如果我们没有指定 @JsName 注解,相应函数的名称会包含从函数签名计算而来的后缀,例如 hello_61zpoe$。
请注意,Kotlin 编译器不会对 external 声明应用这种修饰,因此你不必在其上使用 @JsName。 值得注意的另一个例子是从外部类继承的非外部类。 在这种情况下,任何被覆盖的函数也不会被修饰。
@JsName 的参数需要是一个常量字符串字面值,该字面值是一个有效的标识符。 任何尝试将非标识符字符串传递给 @JsName 时,编译器都会报错。 以下示例会产生编译期错误:
@JsName("new C()") // 此处出错 external fun newC()
在 JavaScript 中表示 Kotlin 类型
fun f() { val x: Int = 23 val y: Any = x println(y as Float) }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍Kotlin 语言中调用 JavaScript 方法实例详解,包括了Kotlin 语言中调用 JavaScript 方法实例详解的使用技巧和注意事项,需要的朋友参考一下 Kotlin 语言中调用 JavaScript 方法实例详解 Kotlin 已被设计为能够与 Java 平台轻松互操作。它将 Java 类视为 Kotlin 类,并且 Java 也将 Kotlin 类视为 Java
本文向大家介绍javascript中this用法实例详解,包括了javascript中this用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript中this用法。分享给大家供大家参考,具体如下: JavaScript中的this含义非常丰富,它可以是全局对象,当前对象或者是任意对象,这都取决于函数的调用方式。函数有以下几种调用方式:作为对象方法调用、作为函数调用
本文向大家介绍Kotlin 基本语法实例详解,包括了Kotlin 基本语法实例详解的使用技巧和注意事项,需要的朋友参考一下 基本语法示例 实例代码: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍StackTraceElement获取方法调用栈信息实例详解,包括了StackTraceElement获取方法调用栈信息实例详解的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是StackTraceElement获取方法调用栈信息的相关内容,具体介绍和实例如下。 一、什么是StackTrace StackTrace(堆栈轨迹)存放的就是方法调用栈的信息,异常处理中常用的pri
问题内容: 我正在使用Mozilla Rhino JavaScript模拟器。它允许我将Java方法添加到上下文中,然后像调用JavaScript函数一样调用它们。但是我无法使用它,除非使用静态方法。 问题是文档的这一部分: 如果该方法不是静态的,则Java的“ this”值将对应于JavaScript的“ this”值。任何使用不正确的Java类型的’this’值调用该函数的尝试都会导致错误。
本文向大家介绍Javascript中匿名函数的调用与写法实例详解(多种),包括了Javascript中匿名函数的调用与写法实例详解(多种)的使用技巧和注意事项,需要的朋友参考一下 Javascript中定义函数的方式有多种,函数直接量就是其中一种。如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。 方式1,调