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