kotlin中的javascript匿名对象
如何在kotlin中创建JavaScript匿名对象?我想创建一个要传递给nodejs应用程序的对象kotlin中的javascript匿名对象,kotlin,kotlin-js,Kotlin,Kotlin Js,如何在kotlin中创建JavaScript匿名对象?我想创建一个要传递给nodejs应用程序的对象 var header = {“content-type”:”text/plain” , “content-length” : 50 ...} 可能的解决办法: 1) 使用js功能: val header = js("({'content-type':'text/plain' , 'content-length' : 50 ...})") 注:括号为必填项 2) 使用动态: val d: d
var header = {“content-type”:”text/plain” , “content-length” : 50 ...}
可能的解决办法:
1) 使用js
功能:
val header = js("({'content-type':'text/plain' , 'content-length' : 50 ...})")
注:括号为必填项
2) 使用动态:
val d: dynamic = object{}
d["content-type"] = "text/plain"
d["content-length"] = 50
val d = js("({})")
d["content-type"] = "text/plain"
d["content-length"] = 50
3) 使用js
+dynamic
:
val d: dynamic = object{}
d["content-type"] = "text/plain"
d["content-length"] = 50
val d = js("({})")
d["content-type"] = "text/plain"
d["content-length"] = 50
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
}
本机
类对象{
本土作家
趣味游戏(道具:字符串):dynamic=noImpl
本土作家
乐趣集(prop:String,value:dynamic){}
}
趣味主线(args:Array){
var o=Object()
o[“内容类型”]=“文本/普通”
o[“内容长度”]=50
}
还有一个可能的解决方案:
object {
val `content-type` = "text/plain"
val `content-length` = 50
}
它似乎不再适用于转义变量名。我是一个Kotlin新手(虽然不是新手开发人员),我稍微将答案从@bashor扩展到了一些看起来更整洁的东西,这些键是有效的Java标识符,但仍然允许那些不是。我用Kotlin 1.0.1测试了它
@JsName("Object")
open class Object {
}
fun jsobject(init: dynamic.() -> Unit): dynamic {
return Object().apply(init)
}
header = jsobject {
validJavaIdentifier = 0.2
this["content-type"] = "text/plain"
this["content-length"] = 50
}
下面是一个帮助函数,用于使用lambda语法初始化对象
inline fun jsObject(init: dynamic.() -> Unit): dynamic {
val o = js("{}")
init(o)
return o
}
用法:
jsObject {
foo = "bar"
baz = 1
}
发出的javascript代码
var o = {};
o.foo = 'bar';
o.baz = 1;
下面是另一个解决方案:
定义以下辅助函数
fun jsObject(vararg pairs: Pair<Any, Any>): dynamic {
val result = js("({})")
for ((key, value) in pairs) {
result[key] = value
}
return result
}
可以使用JavaScript的object.assign()
将常规Kotlin对象转换为JavaScript匿名对象。这允许您尽可能长时间地保持纯Kotlin和类型安全。因此:
fun Any.toJsObject(): dynamic {
val thisArg = this // Allows use in js() function
return js("Object.assign({},thisArg)")
}
val anObject = object { val a = "a" } // Or use a regular class
console.log( anObject.toJsObject().a ) // logs "a"
感谢快速回复第一个解决方案可能会工作,但它不是灵活的,我的意思是它是硬编码的值,我得到一些错误,以及你可以检查它。第二个解决方案在javascript端创建Kotlin.createObject(…)我无法将其传递给node.js这不起作用,尝试执行与OP相同的操作。这个答案是否过时?@gromit190答案看起来像是实际的,如果您有任何问题,请告诉我。这是“可能的”还是可以工作并执行相同的操作?谢谢@JaysonMinard,我修正了我的答案。这是唯一一个对我有效的答案,救生员!返回类型可以是“动态”到“Json”。e、 内联fun jsObject(init:dynamic.)