从 scala.js 访问 JS
Access the JS this from scala.js
我需要实现来自 scala.js 的调用,方法如下:
sigma.classes.graph.addMethod('getNodesCount', function() {
return this.nodesArray.length;
});
就是在JS中带库访问classsigma.clasess.graph的内部数组nodesArray的方式。我试过类似
trait GraphClassesJS extends js.Object {
def addMethod(name:String,handler: js.Function0[Any]):Unit=js.native
}
我试着用
打电话
s.classes.graph.addMethod("getNodesCount",()=>js.ThisFunction.nodesArray.length)
但我得到
value nodesArray is not a member of object scala.scalajs.js.ThisFunction
[error] s.classes.graph.addMethod("getNodesCount",()=>js.ThisFunction.nodesArray.length)
我该怎么做?
谢谢
雷纳尔多
你误解了js.ThisFunction
的本质。它不是 JS 中 this
的语法替代。它是将 this
作为显式参数的函数的替代类型层次结构。
你需要的定义和你写的差不多,只是把js.Function0
换成了js.ThisFunction0
,并且指定了Thing
的类型,其中包含字段nodesArray
(也许Graph
?):
trait Thing extends js.Object {
def nodesArray: js.Array[Node]
}
trait GraphClassesJS extends js.Object {
def addMethod(name: String, handler: js.ThisFunction0[Thing, Any]): Unit = js.native
}
现在,您可以这样称呼它:
s.classes.graph.addMethod("getNodesCount", thiz => thiz.nodesArray.length)
现在 thiz
完全等同于 JS this
。它的类型被推断为 Thing
.
我需要实现来自 scala.js 的调用,方法如下:
sigma.classes.graph.addMethod('getNodesCount', function() {
return this.nodesArray.length;
});
就是在JS中带库访问classsigma.clasess.graph的内部数组nodesArray的方式。我试过类似
trait GraphClassesJS extends js.Object {
def addMethod(name:String,handler: js.Function0[Any]):Unit=js.native
}
我试着用
打电话s.classes.graph.addMethod("getNodesCount",()=>js.ThisFunction.nodesArray.length)
但我得到
value nodesArray is not a member of object scala.scalajs.js.ThisFunction
[error] s.classes.graph.addMethod("getNodesCount",()=>js.ThisFunction.nodesArray.length)
我该怎么做? 谢谢 雷纳尔多
你误解了js.ThisFunction
的本质。它不是 JS 中 this
的语法替代。它是将 this
作为显式参数的函数的替代类型层次结构。
你需要的定义和你写的差不多,只是把js.Function0
换成了js.ThisFunction0
,并且指定了Thing
的类型,其中包含字段nodesArray
(也许Graph
?):
trait Thing extends js.Object {
def nodesArray: js.Array[Node]
}
trait GraphClassesJS extends js.Object {
def addMethod(name: String, handler: js.ThisFunction0[Thing, Any]): Unit = js.native
}
现在,您可以这样称呼它:
s.classes.graph.addMethod("getNodesCount", thiz => thiz.nodesArray.length)
现在 thiz
完全等同于 JS this
。它的类型被推断为 Thing
.