首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将对象JavaScript到Kotlin类?

如何将对象JavaScript到Kotlin类?
EN

Stack Overflow用户
提问于 2018-09-15 11:43:26
回答 3查看 1.4K关注 0票数 1

我想要将一个JavaScript对象加载到Kotlin类中。作为安全检查,我需要验证Kotlin对象是否真的是我创建的类,因为有些JavaScript代码部分不是我设计的。我需要JavaScript正确返回,但我无法验证Kotlin类。

例如:

JavaScript对象

<script id="myJS">
function MyClass(id, name){
    var obj = {};
    obj.id = id;
    obj.name = name;

    return obj;
}
var myClass = MyClass(0, "name_0");
</script>

Kotlin类

class MyClass(
            val id: Int,
            val name: String
)

我使用这个Kotlin代码来获取Kotlin上的JavaScript对象。

val myJS: dynamic = document.getElementById("myJS")
val myClass: MyClass = JSON.parse<MyClass>(JSON.stringify(myJS.myClass))//get JavaScript object
println(myClass.id)//success output "0"
println(myClass.name)//success output "name_0"

println(myClass is MyClass)//but check class this output "false"

如何验证JavaScript对象是创建的Kotlin类?

EN

回答 3

Stack Overflow用户

发布于 2018-10-02 04:48:48

使用kotlinx.serialization库中的JSON.parse,而不是Kotlin/JS标准库中的JSON.parse

来自Kotlin标准库的JSON只是围绕JavaScript JSON object的一个视图。所以JSON.parse创建的JS对象没有任何关于Kotlin类型的信息。

在不能进行类型检查的external类中使用它是很好的。但是你的MyClass是一个普通的类。

从常规Kotlin类构造的对象具有特殊的元数据,这对于类型检查、myClass is MyClass和反射myClass::class == MyClass::class是必不可少的。kotlinx.serialization库创建了这些功能齐全的Kotlin对象。

票数 2
EN

Stack Overflow用户

发布于 2018-09-15 12:25:09

尝试此检查:

myClass::class == MyClass::class
票数 0
EN

Stack Overflow用户

发布于 2018-11-13 20:54:49

这可能会有所帮助:

class MyClass(val id: Int, val name: String) {
    constructor(obj: dynamic): this(obj.id, obj.name)

    override fun toString(): String = 
        "${this.id} ${this.name}"
}

fun main() {

    val obj  = js("{}")
    obj.id   = 1
    obj.name = "Mike"

    val myObj = MyClass(obj)
    println(myObj)
    println(myObj is MyClass)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52341363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档