2014-11-16 13 views
7
  1. Jak przekonwertować z klasy scala na Dynamic, więc nie wspomniane funkcje javascript można nazwać?
  2. Jak przekonwertować z Dynamic na klasę scala?

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 
+0

Dzięki za wyczerpujące wyjaśnienie. Konwersje działają. – ferk86

Powiązane problemy