如何用Kotlin生成名为constructor的JavaScript函数?
解决Kotlin/JS中生成名为
constructor的函数的问题 我懂你碰到的麻烦——constructor既是Kotlin的关键字,又是JavaScript对象的内置属性,常规方法声明同名函数肯定会触发冲突报错。这里有个靠谱的方案,通过直接嵌入JavaScript代码绕过Kotlin的静态检查,精准生成你想要的代码:
class MyComponent { init { // 直接通过js()函数操作JS上下文,给当前实例赋值constructor函数 js("this.constructor = function() {}") } }
为什么之前的方法行不通?
当你尝试用@JsName("constructor")给函数重命名时,Kotlin/JS编译器会检测到这个名称和JavaScript对象的内置constructor属性冲突,因此抛出"JavaScript name generated for this declaration clashes with built-in declaration"的错误——编译器默认不允许你覆盖类的内置构造器引用,除非用这种动态的JS嵌入方式绕过检查。
另一种更Kotlin化的写法(效果一致)
如果你不想直接写JS字符串,也可以借助dynamic类型来实现:
class MyComponent { init { val self: dynamic = this self.constructor = fun() {} } }
这两种写法最终编译生成的JavaScript代码都会贴合你的需求:
function MyComponent() { this.constructor = function() {}; }
(注:你示例里的self应该是指向当前实例的笔误,JS中常规用this指代实例,上面的Kotlin代码生成的逻辑和你要的完全一致)
内容的提问来源于stack exchange,提问作者Freewind
相关产品推荐
相关产品推荐

