コンストラクター内の記述によってnew演算子の挙動が変わることについてまとめました。
##new演算子とは
コンストラクター関数からインスタンスを生成するために使用する演算子
##コンストラクター関数の戻り値がオブジェクトの場合
function F(a, b) {
this.a = a;
this.b = b;
// 戻り値がオブジェクト
return {a : 1};
}
// prototypeに無名関数を追加
F.prototype.c = function() {}
// インスタンス化
const instance = new F(1, 2);
console.log(instance);
returnオブジェクトを__新しいインスタンスオブジェクト__として呼び出し元に返す
→prototypeにメソッドcは存在しない
##コンストラクター関数の戻り値がオブジェクト以外の場合、または、returnが定義されていない場合
function F(a, b) {
this.a = a;
this.b = b;
}
// prototypeに無名関数を追加
F.prototype.c = function() {}
// インスタンス化
const instance = new F(1, 2);
console.log(instance);
コンストラクターの__prototypeのプロパティを_proto_にコピー__し、コンストラクター関数で使用しているthisを呼び出し元に返却する
→thisに格納されたa, bを持ったオブジェクトが生成される
→prototypeにメソッドcが格納される