teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

番号がおかしかった

2016/01/05 14:54

投稿

raccy
raccy

スコア21767

answer CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
  1. コンストラクタに値を指定したreturn文がなければ、新たに作成されたそのクラスのオブジェクトが返ります。
20
20
  2. コンストラクタに値を指定したreturn文があれば、
21
- 1-1. return文で指定した値がObject型であれば、その**指定した値**が返ります。
21
+ 2-1. return文で指定した値がObject型であれば、その**指定した値**が返ります。
22
- 1-2. それ以外なら、return文がない場合と同じです。
22
+ 2-2. それ以外なら、return文がない場合と同じです。
23
- 1-3. ただし、ECMAScript 2015からのclass構文を使っていると**例外が発生する**場合があります。
23
+ 2-3. ただし、ECMAScript 2015からのclass構文を使っていると**例外が発生する**場合があります。
24
24
 
25
25
  法則が複雑で混乱の元なので、値を指定したreturn文は書かない(return文そのものがない、または、`return;`※のみ)のがいいでしょう。
26
26
  ※`return;`は`return undefined;`と同じですが、その場合も、必ず作成したオブジェクトが返り、例外も発生しません。

1

undefiendでないときだよ

2016/01/05 14:54

投稿

raccy
raccy

スコア21767

answer CHANGED
@@ -7,8 +7,8 @@
7
7
  1. return文で終わっているとき
8
8
  1-1. returnの結果がObject型であれば、その結果を返す。
9
9
  1-2. そうではなく、Fが基本型(派生型では無い)であれば、**作成したFのオブジェクト**を返す。
10
- 1-3. そうではなく、returnの結果がundefinedでれば、__TypeError例外を発生させる__。
10
+ 1-3. そうではなく、returnの結果がundefinedで**なければ**、__TypeError例外を発生させる__。
11
- 2. return文終わってないときは、**作成したFのオブジェクト**を返す。
11
+ 2. 1でない、または、1-1〜1-3のどれでもなければ、**作成したFのオブジェクト**を返す。
12
12
 
13
13
  という動作をします(厳密ではありませんし、詳しいところまで見てないので間違いがあるかも知れません)。つまり、Fのコンストラクタが`return {};`で終わっていれば、`new F(args)`は`{}`返しますが、Fが基本型で`return 0;`などで終わっていれば、0ではなくFのオブジェクトが返します。そもそもreturn文がない、または、`undefined`を返すのであれば、Fのオブジェクトを返します。
14
14