小编bas*_*hor的帖子

kotlin中的javascript匿名对象

如何在kotlin中创建JavaScript匿名对象?我想创建这个对象以传递给nodejs app

var header = {“content-type”:”text/plain” , “content-length” : 50 ...}
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-js

14
推荐指数
3
解决办法
3226
查看次数

如何在Kotlin中为属性的支持字段设置JsName?

我在1.0.x中使用了Kotlin不受支持的JavaScript后端,现在我正在尝试将我的玩具项目迁移到1.1.x. 它是与PouchDB连接的单页Web应用程序的最基本骨骼.要添加到PouchDB你需要具有特殊性能的JavaScript对象数据_id_rev.他们还需要没有任何其他属性,_因为它们是由PouchDB保留的.

现在,如果我创建这样的类,我可以将实例发送到PouchDB.

class PouchDoc(
        var _id: String
) {
    var _rev: String? = null
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我做任何事情来使属性成为虚拟 - 让它们覆盖一个接口,或者让类打开并创建一个覆盖它们的子类 - _id字段名称会变成类似的东西_id_mmz446$_0,因此PouchDB会拒绝该对象.如果我应用于@JsName("_id")属性,那只会影响生成的getter和setter - 它仍然会在后备字段中留下一个受损的名称.

此外,对于名称不以其开头的任何虚拟属性_,PouchDB将接受该对象,但它仅存储带有损坏名称的支持字段,而不是名称很好的属性.

我认为现在我可以通过使它们不虚拟来解决问题.但我想在Kotlin中分享PouchDoc和非PouchDoc类之间的接口,似乎我做不到.

知道我怎么能做这个工作,还是需要Kotlin语言改变呢?

kotlin kotlin-js-interop

6
推荐指数
1
解决办法
362
查看次数

如何在 Kotlin for Javascript 中为类设置静态属性

我遇到一种情况,我需要在 Kotlin 中的类上定义静态属性,当它编译为 Javascript 时,它会成为该类上真正的静态字段。在这种情况下,伴随对象不起作用。

例如,如果我有一个抽象类及其实现类,如下所示:

abstract class MyAbstractClass{
  abstract val id: Int
}

class MyClass: MyAbstractClass(){
  override val id: Int = 1 //I want this to actually be "static" on the MyClass
}
Run Code Online (Sandbox Code Playgroud)

编译后的 Javascript 是这样的:

function MyAbstractClass() {
}

function MyClass() {
  MyAbstractClass.call(this);
  this.id_jz5fma$_0 = 1;
}

Object.defineProperty(MyClass.prototype, 'id', {
  get: function () {
    return this.id_jz5fma$_0;
  }
});
Run Code Online (Sandbox Code Playgroud)

但我需要它编译成这样:

function MyAbstractClass() {
}

function MyClass() {
  MyAbstractClass.call(this);
}

MyClass.id = 1;
Run Code Online (Sandbox Code Playgroud)

这样该id字段实际上静态存在于 上,MyClass而无需创建 的新实例 …

javascript kotlin kotlin-js-interop

4
推荐指数
1
解决办法
1118
查看次数

标签 统计

kotlin ×3

kotlin-js-interop ×2

javascript ×1

kotlin-js ×1