ここで何が起こっているのか知りたいです。ご覧のとおり、range
新しいrange
オブジェクトを作成するために呼び出されるコンストラクター関数を定義しました。range
プロトタイプを介してコンストラクターを拡張し、単純なincludes
メソッドを追加しました。新しいオブジェクトを作成し、の変数を使用しましたp
。range
オブジェクトでこのメソッドを使用しようとすると、すべてが正常に機能し、期待どおりに機能します。問題は、それを見ようとすると、タイプが未定義でメソッドがないp.prototype
ことを教えてくれることです...え??p.prototype
何が起きてる??p
オブジェクトはどうですか、そうでp.prototype
はありませんか?
function range(from, to) {
this.from = from;
this.to = to;
}
range.prototype = {
includes: function(x) { return this.from <= x && x <= this.to; },
}
var p = new range(1, 4);
console.log(typeof p) //outputs object
console.log(typeof p.prototype) //outputs undefined
console.log(Object.getOwnPropertyNames(range.prototype)); //outputs includes
console.log(Object.getOwnPropertyNames(p.prototype)); //throws error, p.prototype is not an object