【问题标题】:Convert between scala class and Dynamic在 Scala 类和 Dynamic 之间转换
【发布时间】:2014-11-17 00:27:49
【问题描述】:
  1. 如何将 Scala 类转换为 Dynamic,以便调用未提及的 javascript 函数?
  2. 如何从 Dynamic 转换为 Scala 类?

【问题讨论】:

    标签: scala.js


    【解决方案1】:

    如果 Scala 类是指 JavaScript 类的类型化外观,即扩展 js.Object 的类/特征,那么您可以简单地使用 asInstanceOf 进行转换。例如:

    val dateStatic = new js.Date
    val dateDynamic = dateStatic.asInstanceOf[js.Dynamic]
    

    另一个方向同理:

    val dateStaticAgain = dateDynamic.asInstanceOf[js.Date]
    

    T 扩展js.Any 时,.asInstanceOf[T] 始终是空操作(即硬转换)。

    但是,如果您所说的 Scala 类是指一个适当的 Scala 类(它不是 js.Object 的子类型),那么基本上您可以做同样的事情。但只有@JSExport'ed 成员可以从js.Dynamic 界面看到。例如:

    class Foo(val x: Int) {
      def bar(): Int = x*2
      @JSExport
      def foobar(): Int = x+4
    }
    
    val foo = new Foo(5)
    val fooDynamic = foo.asInstanceOf[js.Dynamic]
    println(fooDynamic.foobar()) // OK, prints 9
    println(fooDynamic.bar())    // TypeError at runtime
    

    【讨论】:

    • 感谢您的全面解释。转换工作。
    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2019-11-18
    • 2023-04-05
    • 1970-01-01
    • 2010-11-29
    • 2021-04-03
    • 2021-03-25
    • 2017-09-30
    相关资源
    最近更新 更多