как создать JavaScript анонимный объект в kotlin? Я хочу, чтобы создать именно этот объект будет передан nodejs Appjavascript анонимный объект в kotlin
var header = {“content-type”:”text/plain” , “content-length” : 50 ...}
как создать JavaScript анонимный объект в kotlin? Я хочу, чтобы создать именно этот объект будет передан nodejs Appjavascript анонимный объект в kotlin
var header = {“content-type”:”text/plain” , “content-length” : 50 ...}
Возможные решения:
1) с js
функции:
val header = js("({'content-type':'text/plain' , 'content-length' : 50 ...})")
Примечание: круглые скобки являются обязательными
2) с dynamic
:
val d: dynamic = object{}
d["content-type"] = "text/plain"
d["content-length"] = 50
3) с js
+ dynamic
:
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
}
Еще одно из возможных решений:
object {
val `content-type` = "text/plain"
val `content-length` = 50
}
Кажется, что это не w ork больше с именами экранированных переменных.
это «возможно», или он работает и делает то же самое? –
Спасибо @JaysonMinard, я исправил свой ответ. – Sharp
Я новичок в Kotlin (хотя и не разработчик новичка), я слегка расширил ответ от @bashor на что-то, что выглядит более аккуратно для ключей, которые являются действительными идентификаторами Java, но все же допускают те, которые не являются. Я тестировал его с помощью Kotlin 1.0.1.
@native("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
}
Вот вспомогательная функция для инициализации объекта с синтаксисом лямбда
inline fun jsObject(init: dynamic.() -> Unit): dynamic {
val o = js("{}")
init(o)
return o
}
Использование:
jsObject {
foo = "bar"
baz = 1
}
Emited Javascript код
var o = {};
o.foo = 'bar';
o.baz = 1;
спасибо за быстрый ответ первого решения может работать, но это не flexibl e i означает, что это жестко закодированное значение, и я получаю некоторые ошибки, а также вы можете проверить его. 2-е решение создает Kotlin.createObject (.....) на стороне javascript, я не могу передать это node.js, это не работает –
Я обновил ответ. Вероятно, 3 - это то, что вам нужно. – bashor
спасибо, братья 3 и 4 оба работали –