在scala.js中扩展@js.native
类并在node中运行时,出现TypeError。
object MainApp {
def main(args: Array[String]): Unit = {
println(new B())
}
}
class B extends A
@js.native
@JSImport("example", "A")
class A extends js.Object
Running抱怨未致电new
:
TypeError: Class constructor A cannot be invoked without 'new'
生成的代码不会在本机父类上调用new
:
/** @constructor */
var $c_LB = (function $c_LB() {
$i_$0040test$002dtest$002ftest.B.call(this)
});
答案 0 :(得分:1)
默认情况下,Scala.js使用function
和prototype
将类分解为ECMAScript 5.1中的“足够接近”表示。只要您不尝试扩展其他ECMAScript class
es(您可以扩展其他基于function
的其他“类”),这种足够接近的废话就是有效的。
如果需要扩展适当的ES class
,则还需要告诉Scala.js发出ECMAScript 2015 class
es。可以使用以下sbt配置完成此操作:
// in a single-project build:
scalaJSLinkerConfig ~= { _.withESFeatures(_.withUseECMAScript2015(true)) }
// in a multi-project build:
lazy val myJSProject = project.
...
settings(
scalaJSLinkerConfig ~= { _.withESFeatures(_.withUseECMAScript2015(true)) }
)