クラスとモジュールに関する第9章のpp 200-201にあります。以下のこのアプローチはより簡単だと思いましたが、以下のコメント付きの出力行は不明な理由で機能しません。
Range.prototype = {
includes: function(x) {
return this.from <= x && x <= this.to;
},
foreach: function(f) {
for (var x = Math.ceil(this.from); x <= this.to; x++) f(x);
},
toString: function() {
return "(" + this.from + "..." + this.to + ")";
},
Z: "ZZZZZZZZZZZZZZZZZZZ",
}
function Range(from,to) {
this.from = from
this.to = to
}
var r = new Range(1,3)
console.log(Range.prototype.Z)
console.log(r.constructor.prototype.Z) //undefined
console.log(r.Z)
console.log(r.includes(2));
console.log(r.toString());
console.log(r); // Does not use Range.toString
r.foreach(console.log); // TypeError