2014-11-16 17 views
7
  1. Làm cách nào để chuyển đổi từ lớp scala sang Dynamic, vì vậy các hàm javascript không đề cập có thể được gọi?
  2. Làm thế nào để bạn chuyển đổi từ động sang lớp scala?

Trả lời

12

Nếu bởi lớp Scala bạn có nghĩa là một mặt tiền gõ đến các lớp học JavaScript, ví dụ, một lớp/đặc điểm mà kéo dài js.Object, sau đó bạn có thể chuyển đổi đơn giản với một asInstanceOf. Ví dụ:

val dateStatic = new js.Date 
val dateDynamic = dateStatic.asInstanceOf[js.Dynamic] 

Các hướng khác là như nhau:

val dateStaticAgain = dateDynamic.asInstanceOf[js.Date] 

.asInstanceOf[T] luôn luôn là một không-op (ví dụ, một dàn diễn viên cứng) khi T kéo dài js.Any.

Nếu, tuy nhiên, bởi lớp Scala bạn có nghĩa là một lớp Scala thích hợp (không phải là kiểu con của js.Object), về cơ bản bạn có thể làm điều tương tự. Nhưng chỉ @JSExport 'thành viên được chỉnh sửa sẽ hiển thị từ giao diện js.Dynamic. Ví dụ:

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

Cảm ơn bạn đã giải thích toàn diện. Các chuyển đổi hoạt động. – ferk86

Các vấn đề liên quan