<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>7.2 JavaScript 互操作 on 编程那些事儿</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/</link><description>Recent content in 7.2 JavaScript 互操作 on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 13 Sep 2026 18:20:56 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/index.xml" rel="self" type="application/rss+xml"/><item><title>7.2.1 浏览器与 DOM API</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.1-BrowserApiDom/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.1-BrowserApiDom/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/browser-api-dom.html"&gt;https://kotlinlang.org/docs/browser-api-dom.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="721-浏览器与-dom-api"&gt;7.2.1 浏览器与 DOM API&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://github.com/Kotlin/kotlinx-browser"&gt;&lt;code&gt;kotlinx-browser&lt;/code&gt;&lt;/a&gt; 库让你可以访问浏览器特有的功能。它包含 &lt;code&gt;document&lt;/code&gt; 和 &lt;code&gt;window&lt;/code&gt; 这类常用的顶层对象，并在可能的情况下为它们的功能提供类型安全的封装。&lt;/p&gt;
&lt;p&gt;作为后备方案，&lt;code&gt;dynamic&lt;/code&gt; 类型可以访问那些无法很好地映射到 Kotlin 类型系统中的函数。&lt;/p&gt;</description></item><item><title>7.2.2 从 Kotlin 使用 JavaScript 代码</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.2-JsInterop/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.2-JsInterop/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/js-interop.html"&gt;https://kotlinlang.org/docs/js-interop.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="722-从-kotlin-使用-javascript-代码"&gt;7.2.2 从 Kotlin 使用 JavaScript 代码&lt;/h1&gt;
&lt;p&gt;Kotlin 最初就是为与 Java 平台轻松互操作而设计的：它把 Java 类视为 Kotlin 类，而 Java 也把 Kotlin 类视为 Java 类。&lt;/p&gt;
&lt;p&gt;不过，JavaScript 是动态类型语言，也就是说它不会在编译期检查类型。你可以通过 &lt;a href="../7.2.3-DynamicType/"&gt;dynamic&lt;/a&gt; 类型自由地与 JavaScript 交互。如果你想利用 Kotlin 类型系统的全部能力，可以为 JavaScript 库创建外部声明，Kotlin 编译器和相关工具链都能理解它们。&lt;/p&gt;</description></item><item><title>7.2.3 动态类型</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.3-DynamicType/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.3-DynamicType/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/dynamic-type.html"&gt;https://kotlinlang.org/docs/dynamic-type.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="723-动态类型"&gt;7.2.3 动态类型&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 面向 JVM 的代码不支持动态类型。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;作为静态类型语言，Kotlin 仍然需要与无类型或弱类型的环境（例如 JavaScript 生态）互操作。为方便这些用例，语言中提供了 &lt;code&gt;dynamic&lt;/code&gt; 类型：&lt;/p&gt;</description></item><item><title>7.2.4 使用来自 npm 的依赖</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.4-UsingPackagesFromNpm/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.4-UsingPackagesFromNpm/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/using-packages-from-npm.html"&gt;https://kotlinlang.org/docs/using-packages-from-npm.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="724-使用来自-npm-的依赖"&gt;7.2.4 使用来自 npm 的依赖&lt;/h1&gt;
&lt;p&gt;在 Kotlin/JS 项目中，所有依赖都可以通过 Gradle 插件来管理。这包括 &lt;code&gt;kotlinx.coroutines&lt;/code&gt;、&lt;code&gt;kotlinx.serialization&lt;/code&gt; 或 &lt;code&gt;ktor-client&lt;/code&gt; 这样的 Kotlin/Multiplatform 库。&lt;/p&gt;</description></item><item><title>7.2.5 从 JavaScript 使用 Kotlin 代码</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.5-JsToKotlinInterop/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.5-JsToKotlinInterop/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/js-to-kotlin-interop.html"&gt;https://kotlinlang.org/docs/js-to-kotlin-interop.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="725-从-javascript-使用-kotlin-代码"&gt;7.2.5 从 JavaScript 使用 Kotlin 代码&lt;/h1&gt;
&lt;p&gt;根据所选的 &lt;a href="../7.2.6-JsModules/"&gt;JavaScript 模块&lt;/a&gt;系统，Kotlin/JS 编译器会生成不同的输出。但总的来说，Kotlin 编译器会生成普通的 JavaScript 类、函数和属性，你可以在 JavaScript 代码中自由使用它们。不过有一些细微之处需要记住。&lt;/p&gt;</description></item><item><title>7.2.6 JavaScript 模块</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.6-JsModules/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.6-JsModules/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/js-modules.html"&gt;https://kotlinlang.org/docs/js-modules.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="726-javascript-模块"&gt;7.2.6 JavaScript 模块&lt;/h1&gt;
&lt;p&gt;你可以把 Kotlin 项目编译为适用于各种流行模块系统的 JavaScript 模块。目前我们支持以下 JavaScript 模块配置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules"&gt;ES Modules&lt;/a&gt;，即 JavaScript 中声明模块的标准方式（使用 JavaScript 的 &lt;code&gt;import/export&lt;/code&gt; 语法）。当 &lt;code&gt;target&lt;/code&gt; 设为 &lt;code&gt;es2015&lt;/code&gt; 时默认使用它。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/umdjs/umd"&gt;统一模块定义 (UMD)&lt;/a&gt;，它同时兼容 &lt;em&gt;AMD&lt;/em&gt; 和 &lt;em&gt;CommonJS&lt;/em&gt;。UMD 模块也可以在不被导入、或不存在模块系统的情况下执行。这是 &lt;code&gt;browser&lt;/code&gt; 和 &lt;code&gt;nodejs&lt;/code&gt; 目标的默认选项。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/amdjs/amdjs-api/wiki/AMD"&gt;异步模块定义 (AMD)&lt;/a&gt;，&lt;a href="https://requirejs.org/"&gt;RequireJS&lt;/a&gt; 库尤其使用它。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.commonjs.org/wiki/Modules/1.1"&gt;CommonJS&lt;/a&gt;，被 Node.js/npm 广泛使用（&lt;code&gt;require&lt;/code&gt; 函数和 &lt;code&gt;module.exports&lt;/code&gt; 对象）。&lt;/li&gt;
&lt;li&gt;Plain。不为任何模块系统编译。你可以按名称在全局作用域中访问模块。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="browser-targets"&gt;浏览器目标&lt;/h2&gt;
&lt;p&gt;如果你打算在 Web 浏览器环境中运行代码，并且想使用 UMD 之外的模块系统，可以在 &lt;code&gt;webpackTask&lt;/code&gt; 配置块中指定所需的模块类型。例如，要切换到 CommonJS，请使用：&lt;/p&gt;</description></item><item><title>7.2.7 Kotlin/JS 反射</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.7-JsReflection/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.7-JsReflection/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/js-reflection.html"&gt;https://kotlinlang.org/docs/js-reflection.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="727-kotlinjs-反射"&gt;7.2.7 Kotlin/JS 反射&lt;/h1&gt;
&lt;p&gt;Kotlin/JS 对 Kotlin &lt;a href="../../../languageguide/5.13-Reflection/"&gt;反射 API&lt;/a&gt;提供有限支持。API 中受支持的部分只有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../../../languageguide/5.13-Reflection/#class-references"&gt;类引用&lt;/a&gt;（&lt;code&gt;::class&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;a href="#ktype-and-typeof"&gt;&lt;code&gt;KType&lt;/code&gt; 与 &lt;code&gt;typeof()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#kclass-and-createinstance"&gt;&lt;code&gt;KClass&lt;/code&gt; 与 &lt;code&gt;createInstance()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="class-references"&gt;类引用&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;::class&lt;/code&gt; 语法会返回对某个实例所属类的引用，或与给定类型相对应的类。在 Kotlin/JS 中，&lt;code&gt;::class&lt;/code&gt; 表达式的值是一个精简版的 &lt;a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/"&gt;KClass&lt;/a&gt; 实现，它只支持：&lt;/p&gt;</description></item><item><title>7.2.8 类型安全的 HTML DSL</title><link>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.8-TypesafeHtmlDsl/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/interoperability/7.2-Javascriptinterop/7.2.8-TypesafeHtmlDsl/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/typesafe-html-dsl.html"&gt;https://kotlinlang.org/docs/typesafe-html-dsl.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="728-类型安全的-html-dsl"&gt;7.2.8 类型安全的 HTML DSL&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.github.com/kotlin/kotlinx.html"&gt;kotlinx.html 库&lt;/a&gt;提供了用静态类型 HTML 构建器生成 DOM 元素的能力（除了 JavaScript 之外，它甚至也能用于 JVM 目标！）。要使用这个库，请把相应的仓库和依赖加入我们的 &lt;code&gt;build.gradle.kts&lt;/code&gt; 文件：&lt;/p&gt;</description></item></channel></rss>