回答編集履歴

1

関数とコンストラクタ

2020/05/06 17:48

投稿

think49
think49

スコア18166

test CHANGED
@@ -1,3 +1,7 @@
1
+ ### 関数呼び出し
2
+
3
+
4
+
1
5
  > ```JavaScript
2
6
 
3
7
  > console.log(Boolean("string")); //=> true
@@ -12,4 +16,58 @@
12
16
 
13
17
 
14
18
 
19
+ ### 関数はコンストラクタの性質を併せ持つ
20
+
21
+
22
+
23
+ 関数定義の仕方によって違いはありますが、全ての関数はコンストラクタでもあるのが原則です。
24
+
25
+ コンストラクタ呼び出しできるなら、コンストラクタといえますし、関数呼び出しできるなら、関数といえます。
26
+
27
+ `Boolean()` は両方の性質を持ちます。
28
+
29
+
30
+
31
+ ```JavaScript
32
+
33
+ new Boolean; // コンストラクタ呼び出し
34
+
35
+ Boolean(); // 関数呼び出し
36
+
37
+ ```
38
+
39
+
40
+
41
+ ### 関数またはコンストラクタの性質を持つ場合
42
+
43
+
44
+
45
+ 例外として、一部のビルトイン関数はいずれか一つの呼び出しのみを許可しています。
46
+
47
+
48
+
49
+ ```JavaScript
50
+
51
+ Map(); // TypeError: Constructor Map requires 'new'
52
+
53
+ new parseInt; // TypeError: parseInt is not a constructor
54
+
55
+ ```
56
+
57
+
58
+
59
+ ユーザ定義としては、アロー関数やclass構文も例外に入ります。
60
+
61
+
62
+
63
+ ```JavaScript
64
+
65
+ new (()=>{}); // TypeError: (intermediate value) is not a constructor
66
+
67
+ (class {})(); // TypeError: Class constructors cannot be invoked without 'new'
68
+
69
+ ```
70
+
71
+
72
+
15
73
  Re: ohs6261 さん