如何从Scala.js调用Javascript apply()?
发布时间:2020-12-16 18:16:34 所属栏目:安全 来源:网络整理
导读:如何从 Scala.js代码调用在 Javascript对象上定义的名为apply()的函数? 显而易见的解决方案不起作用,因为apply总是通过Scala.JS(?)编译到其父对象的函数调用中: var test = { apply: function(idx) {...},apple: function(idx) {...}} trait Test extends
如何从
Scala.js代码调用在
Javascript对象上定义的名为apply()的函数?
显而易见的解决方案不起作用,因为apply总是通过Scala.JS(?)编译到其父对象的函数调用中: var test = { apply: function(idx) {...},apple: function(idx) {...} } trait Test extends js.Object { def apple(idx: Int) : Int = ??? def apply(idx: Int) : Int = ??? } val test = js.Dynamic.global.test.asInstanceOf[Test] test.apple(1) // works,of course test.apply(1) // does not work (seems to be compiled into the call test(1) ?) js.Dynamic.global.test.apply(1) // does not work either 解决方法
您可以使用@JSName(“apply”)在Facade类型中注释apply方法.这将产生所需的行为:
trait Test extends js.Object { def apple(idx: Int) : Int = ??? @JSName("apply") def apply(idx: Int) : Int = ??? } 测试: val test = js.Dynamic.literal( apply = (idx: Int) => idx,apple = (idx: Int) => idx ).asInstanceOf[Test] test.apple(1) // -> 1 test.apply(1) // -> 1 对于动态类型的情况,您必须手动调用applyDynamicNamed: val dyn = test.asInstanceOf[js.Dynamic] dyn.applyDynamicNamed("apply")(1) // -> 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |