【发布时间】:2014-11-17 00:27:49
【问题描述】:
- 如何将 Scala 类转换为 Dynamic,以便调用未提及的 javascript 函数?
- 如何从 Dynamic 转换为 Scala 类?
【问题讨论】:
标签: scala.js
【问题讨论】:
标签: scala.js
如果 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
【讨论】: