2014-11-16 3 views
7
  1. के बीच कनवर्ट करें आप स्कैला क्लास से डायनामिक में कैसे परिवर्तित करते हैं, इसलिए अनियंत्रित जावास्क्रिप्ट फ़ंक्शंस को कॉल किया जा सकता है?
  2. आप गतिशील से स्कैला कक्षा में कैसे परिवर्तित करते हैं?

उत्तर

12

स्काला वर्ग द्वारा आप जावास्क्रिप्ट कक्षाएं, करने के लिए एक टाइप किया मुखौटा मतलब अगर यानी, किसी वर्ग/ऐसी विशेषता है जो js.Object फैली हुई है, तो आप बस एक asInstanceOf साथ बदल सकते हैं। उदाहरण के लिए:

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

दूसरी दिशा में एक ही है:

val dateStaticAgain = dateDynamic.asInstanceOf[js.Date] 

.asInstanceOf[T] हमेशा एक नहीं सेशन (यानी, एक हार्ड डाली) तब होता है जब T फैली js.Any

यदि स्केल क्लास द्वारा आप एक उचित स्कैला वर्ग (जो js.Object का उपप्रकार नहीं है) का मतलब है, तो मूल रूप से आप वही काम कर सकते हैं। लेकिन केवल @JSExport 'एड सदस्य 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 
+0

व्यापक स्पष्टीकरण के लिए धन्यवाद। रूपांतरण काम करते हैं। – ferk86

संबंधित मुद्दे