【发布时间】:2017-02-03 04:46:36
【问题描述】:
原生 JS 类型的 Scala.js 外观可以如下所示(来自Three.js facade):
@js.native
@JSName("THREE.Vector3")
class Vector3 extends Vector {
def this(x: Double = js.native, y: Double = js.native, z: Double = js.native) = this()
var x: Double = js.native
var y: Double = js.native
var z: Double = js.native
/* ... */
}
构造Vector3的函数对应的Javascript definition为:
function Vector3( x, y, z ) {
this.x = x || 0;
this.y = y || 0;
this.z = z || 0;
}
我已经阅读了有关creating Scala.js facades 的文档,但是那里只是简单地提到了构造函数。外观代码在实际代码中运行良好,但我不确定定义是否正确以及它为什么以及如何工作。
- 外观不允许存在任何参数构造函数。
- 带参数的构造函数只是调用无参数构造函数。对象似乎仍然构造得很好,成员设置为传递的值。
- 构造函数使用
js.native作为所有参数的默认值。所有的门面都应该这样定义构造函数吗?
特别是。第二点让我感到困惑。这怎么行?在这三种情况下,我想知道为构造函数生成了哪些 JS 代码以及为什么。
人们也可以想象一种不同的方式来编写外观。那会更正确吗?
class Vector3(var x: Double = js.native, var y: Double = js.native, var z: Double = js.native) extends Vector {
/* ... */
}
【问题讨论】:
标签: scala constructor scala.js