Scala.js фасад для нативного типов JS может выглядеть следующим образом (от Three.js facade):Scala.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
/* ... */
}
Соответствующий Javascript definition функции строящейся Vector3
является:
function Vector3(x, y, z) {
this.x = x || 0;
this.y = y || 0;
this.z = z || 0;
}
Я прочитал документы о creating Scala.js facades, однако конструкторы здесь кратко упоминаются. Код с фасада отлично работает в реальном коде, однако я не уверен, правильное определение и почему и как оно работает.
- фасад не позволяет конструктору аргументов.
- конструктор с аргументами просто вызывает конструктор без аргументов. Тем не менее объект, кажется, сконструирован отлично, с элементом, установленным на переданные значения.
- конструктор использует значение
js.native
как значение по умолчанию для всех аргументов. Должны ли все фасады определять конструкторы таким образом?
Esp. второй момент меня смущает. Как это может работать? Во всех трех случаях я хотел бы знать, какой код JS генерируется для конструктора и почему.
Можно также представить себе, как писать фасад. Правильно ли это?
class Vector3(var x: Double = js.native, var y: Double = js.native, var z: Double = js.native) extends Vector {
/* ... */
}