JavaScript 中调用 Kotlin 方法实例详解

发布时间 - 2026-01-11 01:48:44    点击率:

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 类型

  1. 除了 kotlin.Long 的 Kotlin 数字类型映射到 JavaScript Number。
  2. kotlin.Char 映射到 JavaScript Number 来表示字符代码。
  3. Kotlin 在运行时无法区分数字类型(kotlin.Long 除外),即以下代码能够工作:
fun f() {
  val x: Int = 23
  val y: Any = x
  println(y as Float)
}
  1. Kotlin 保留了 kotlin.Int、 kotlin.Byte、 kotlin.Short、 kotlin.Char 和 kotlin.Long 的溢出语义。
  2. JavaScript 中没有 64 位整数,所以 kotlin.Long 没有映射到任何 JavaScript 对象, 它是由一个 Kotlin 类模拟的。
  3. kotlin.String 映射到 JavaScript String。
  4. kotlin.Any 映射到 JavaScript Object(即 new Object()、 {} 等)。
  5. kotlin.Array 映射到 JavaScript Array。
  6. Kotlin 集合(即 List、 Set、 Map 等)没有映射到任何特定的 JavaScript 类型。
  7. kotlin.Throwable 映射到 JavaScript Error。
  8. Kotlin 在 JavaScript 中保留了惰性对象初始化。
  9. Kotlin 不会在 JavaScript 中实现顶层属性的惰性初始化。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# JavaScript  # 中调用  # Kotlin的方法  # js  # 调用kotlin  # Kotlin 语言中调用 JavaScript 方法实例详解  # 用Kotlin实现Android点击事件的方法  # 详解Kotlin中如何实现类似Java或C#中的静态方法  # Kotlin实现静态方法  # 详解Kotlin中的变量和方法  # 是一个  # 你应该  # 在这种情况下  # 留了  # 你可以  # 是由  # 你在  # 而来  # 适用于  # 会在  # 是从  # 将其  # 可以通过  # 希望能  # 会对  # 请注意  # 可以使用  # 你把  # 你将  # 报错 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 制作电商网页,电商供应链怎么做?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  如何在新浪SAE免费搭建个人博客?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Python进程池调度策略_任务分发说明【指导】  Laravel安装步骤详细教程_Laravel环境搭建指南  jQuery中的100个技巧汇总  Python文件操作最佳实践_稳定性说明【指导】  如何快速完成中国万网建站详细流程?  Android实现代码画虚线边框背景效果  微信小程序 input输入框控件详解及实例(多种示例)  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  北京专业网站制作设计师招聘,北京白云观官方网站?  Java遍历集合的三种方式  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  如何用免费手机建站系统零基础打造专业网站?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  手机网站制作与建设方案,手机网站如何建设?  Laravel如何创建自定义Facades?(详细步骤)  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  大连 网站制作,大连天途有线官网?  如何在阿里云部署织梦网站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  免费视频制作网站,更新又快又好的免费电影网站?  Python文件异常处理策略_健壮性说明【指导】  如何在万网自助建站平台快速创建网站?  Linux系统命令中tree命令详解  如何在云主机快速搭建网站站点?  js代码实现下拉菜单【推荐】  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel Fortify是什么,和Jetstream有什么关系  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  在Oracle关闭情况下如何修改spfile的参数  Laravel如何生成API文档?(Swagger/OpenAPI教程)  千库网官网入口推荐 千库网设计创意平台入口  javascript中的try catch异常捕获机制用法分析  如何在IIS中新建站点并解决端口绑定冲突?  网站建设保证美观性,需要考虑的几点问题!  大型企业网站制作流程,做网站需要注册公司吗?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  如何快速搭建高效香港服务器网站?  如何快速搭建个人网站并优化SEO?