如何在kotlin中创建JavaScript匿名对象?我想创建这个对象以传递给nodejs app
var header = {“content-type”:”text/plain” , “content-length” : 50 ...}
Run Code Online (Sandbox Code Playgroud) 我在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 中的类上定义静态属性,当它编译为 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而无需创建 的新实例 …