0
0

More than 3 years have passed since last update.

コンストラクター内の記述によるnew演算子の挙動の違い

Posted at

コンストラクター内の記述によって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);

スクリーンショット (269).png

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);

スクリーンショット (270).png

コンストラクターのprototypeのプロパティを_proto_にコピーし、コンストラクター関数で使用しているthisを呼び出し元に返却する
→thisに格納されたa, bを持ったオブジェクトが生成される
→prototypeにメソッドcが格納される

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0