- Come si converte da una classe di scala in Dinamica, quindi è possibile chiamare le funzioni JavaScript non menzionate?
- Come si converte dalla classe dinamica a una scala?
7
A
risposta
12
Se per classe Scala si vuol dire una facciata digitato per classi JavaScript, vale a dire, una classe/tratto che si estende js.Object
, allora è possibile convertire in modo semplice con asInstanceOf
. Ad esempio:
val dateStatic = new js.Date
val dateDynamic = dateStatic.asInstanceOf[js.Dynamic]
L'altra direzione è la stessa:
val dateStaticAgain = dateDynamic.asInstanceOf[js.Date]
.asInstanceOf[T]
è sempre un no-op (cioè un getto duro) quando T
estende js.Any
.
Se, per classe Scala si intende una classe Scala corretta (che non è un sottotipo di js.Object
), in pratica si può fare la stessa cosa. Ma solo i membri di @JSExport
saranno visibili dall'interfaccia js.Dynamic
. Ad esempio:
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
Grazie per la spiegazione completa. Le conversioni funzionano. – ferk86