Scala.jsのファサードは、(Three.js facadeから)次のようになります。Scala.jsネイティブJSタイプのネイティブのJavascriptのコンストラクタ
@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についてのドキュメントを読んでいますが、コンストラクタはここで簡単に述べられています。ファサードからのコードは実際のコードではうまくいきますが、定義が正しいのか、それがなぜ、どのように機能するのかは分かりません。
- facadeには引数コンストラクタは存在しません。
- 引数を指定したコンストラクタでは、引数なしコンストラクタが呼び出されます。それでも、オブジェクトは正常に構築されたように見え、メンバーは渡された値に設定されます。
- コンストラクタは、すべての引数のデフォルト値として
js.native
を使用します。すべてのファサードでこのようにコンストラクタを定義する必要がありますか?
Esp。第2のポイントは私を混乱させています。これはどのように機能しますか? 3つのケースすべてで、コンストラクタでJSコードが生成された理由とその理由を知りたいと思います。
また、ファサードの書き方を変える方法を想像することもできます。それはより正確でしょうか?
class Vector3(var x: Double = js.native, var y: Double = js.native, var z: Double = js.native) extends Vector {
/* ... */
}