- Jak przekonwertować z klasy scala na Dynamic, więc nie wspomniane funkcje javascript można nazwać?
- Jak przekonwertować z Dynamic na klasę scala?
7
A
Odpowiedz
12
Jeśli przez klasy Scala znaczy wpisywanych fasadę do klas JavaScript, tj klasa/cecha, która rozciąga js.Object
, potem można przekonwertować prosto z asInstanceOf
. Np
val dateStatic = new js.Date
val dateDynamic = dateStatic.asInstanceOf[js.Dynamic]
Drugi kierunek jest taki sam:
val dateStaticAgain = dateDynamic.asInstanceOf[js.Date]
.asInstanceOf[T]
zawsze bez OP (to jest twarde odlewane) przy T
rozciąga js.Any
.
Jeśli jednak według klasy Scala masz na myśli odpowiednią klasę Scala (która nie jest podtypem js.Object
), to w zasadzie możesz zrobić to samo. Ale tylko członkowie ed będą widoczni z interfejsu js.Dynamic
. Na przykład:
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
Dzięki za wyczerpujące wyjaśnienie. Konwersje działają. – ferk86