在scala类和Dynamic之间转换

时间:2014-11-16 15:06:15

标签: scala.js

  1. 如何从scala类转换为Dynamic,因此可以调用未提及的javascript函数?
  2. 如何从Dynamic转换为scala类?

1 个答案:

答案 0 :(得分:15)

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

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

另一个方向是相同的:

val dateStaticAgain = dateDynamic.asInstanceOf[js.Date]
.asInstanceOf[T]延伸T时,

js.Any始终是无操作(即强硬转换)。

但是,如果Scala类是指一个正确的Scala类(不是js.Object的子类型),那么基本上你可以做同样的事情。但是@JSExport界面只能看到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