在scala类和Dynamic之间转换

fer*_*k86 8 scala.js

  1. 你如何从一个scala类转换为动态,所以可以调用未提及的javascript函数?
  2. 你如何从Dynamic转换为scala类?

sjr*_*jrd 15

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

val dateStatic = new js.Date
val dateDynamic = dateStatic.asInstanceOf[js.Dynamic]
Run Code Online (Sandbox Code Playgroud)

另一个方向是相同的:

val dateStaticAgain = dateDynamic.asInstanceOf[js.Date]
Run Code Online (Sandbox Code Playgroud)

.asInstanceOf[T]T延伸时总是一个无操作(即硬铸)js.Any.

但是,如果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
Run Code Online (Sandbox Code Playgroud)