答案 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