0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?