扩展js.native类会产生TypeError:如果没有“ new”,则无法调用类构造函数

时间:2018-10-22 19:25:13

标签: scala.js

在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)
});

1 个答案:

答案 0 :(得分:1)

默认情况下,Scala.js使用functionprototype将类分解为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)) }
  )