kotlin中的javascript匿名对象

Joh*_*ham 14 kotlin kotlin-js

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

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

bas*_*hor 18

可能的解决方案:

1)js功能:

val header = js("({'content-type':'text/plain' , 'content-length' : 50 ...})") 
Run Code Online (Sandbox Code Playgroud)

注意:括号是强制性的

2)用dynamic:

val d: dynamic = object{}
d["content-type"] = "text/plain"
d["content-length"] = 50
Run Code Online (Sandbox Code Playgroud)

3)js+ dynamic:

val d = js("({})")
d["content-type"] = "text/plain"
d["content-length"] = 50
Run Code Online (Sandbox Code Playgroud)

4)原生声明:

native
class Object {
  nativeGetter
  fun get(prop: String): dynamic = noImpl

  nativeSetter
  fun set(prop: String, value: dynamic) {}
}

fun main(args : Array<String>) {
  var o = Object()
  o["content-type"] = "text/plain"
  o["content-length"] = 50
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*arp 6

另一种可能的解决方案:

object {
        val `content-type` = "text/plain"
        val `content-length` = 50
}
Run Code Online (Sandbox Code Playgroud)

似乎它不再适用于转义的变量名。


Kir*_*man 6

这是一个帮助程序函数,使用lambda语法初始化对象

inline fun jsObject(init: dynamic.() -> Unit): dynamic {
    val o = js("{}")
    init(o)
    return o
}
Run Code Online (Sandbox Code Playgroud)

用法:

jsObject {
    foo = "bar"
    baz = 1
}
Run Code Online (Sandbox Code Playgroud)

发出的javascript代码

var o = {};
o.foo = 'bar';
o.baz = 1;
Run Code Online (Sandbox Code Playgroud)