回答編集履歴

8

console.logの割り当て等、不足説明追加

2019/06/06 02:40

投稿

退会済みユーザー
test CHANGED
@@ -38,13 +38,23 @@
38
38
 
39
39
  ```js
40
40
 
41
+ "use strict";
42
+
43
+
44
+
45
+ /* console.logと毎回書くのは面倒&見づらいゆえ、`_`(アンダースコア)に割り当て */
46
+
47
+ let _ = console.log;
48
+
49
+
50
+
41
51
  function AirMax(){
42
52
 
43
53
  this.brand = "Nike";
44
54
 
45
55
  this.shoesType = "Air Max";
46
56
 
47
- }
57
+ };
48
58
 
49
59
 
50
60
 
@@ -54,15 +64,15 @@
54
64
 
55
65
 
56
66
 
57
- _( airMax1.brand ) //-> "Nike"
67
+ _( airMax1.brand ); //-> "Nike"
58
-
68
+
59
- _( airMax1.shoesType ) //-> "Air Max"
69
+ _( airMax1.shoesType ); //-> "Air Max"
60
-
61
-
62
-
70
+
71
+
72
+
63
- _( airMax2.brand ) //-> "Nike"
73
+ _( airMax2.brand ); //-> "Nike"
64
-
74
+
65
- _( airMax2.shoesType ) //-> "Air Max"
75
+ _( airMax2.shoesType ); //-> "Air Max"
66
76
 
67
77
  ```
68
78
 
@@ -118,9 +128,9 @@
118
128
 
119
129
 
120
130
 
121
- _( airMax1.owner ) //-> "Taro"
131
+ _( airMax1.owner ); //-> "Taro"
122
-
132
+
123
- _( airMax2.owner ) //-> "Hana"
133
+ _( airMax2.owner ); //-> "Hana"
124
134
 
125
135
 
126
136
 

7

追記 正完了

2019/06/06 02:40

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- ## コンストラクター関数
1
+ # コンストラクター関数
2
2
 
3
3
  コンストラクターとは、正確にはコンストラクター関数であり、現実で例えると、工場の製造機のようなものです。
4
4
 
@@ -78,9 +78,13 @@
78
78
 
79
79
 
80
80
 
81
-
81
+ **新しく具現化され返却された物体は、コンストラクター関数内で定義された性質・術が初期値化されています。**
82
-
82
+
83
+
84
+
85
+
86
+
83
- ## 少しだけ違うものを具現化する
87
+ # 少しだけ違うものを具現化する
84
88
 
85
89
  先の例では、具現物が全く同じものばかりになってしまいます。
86
90
 
@@ -88,6 +92,8 @@
88
92
 
89
93
  そこで、少し違うものを作りたい場合、例えば先の靴の例で言えば「靴に買った人の名前を入れる」事にします。そういう場合は、具現化時に、コンストラクター関数に引数として名前を渡せるように、コンストラクター関数を少し変更します。
90
94
 
95
+
96
+
91
97
  ```js
92
98
 
93
99
  function AirMax(name){
@@ -122,29 +128,31 @@
122
128
 
123
129
 
124
130
 
125
- ## まとめ
131
+ # まとめ
126
132
 
127
133
  上記の靴は、分かりやすい現実の例で例えました。既知かもですが、プログミングでは、物理的なものだけに限らず、あらゆるの物事を物体(オブジェクト)で表すことが出来ます。
128
134
 
129
135
 
130
136
 
131
- ## 用語
137
+ # 用語
132
138
 
133
139
  (カタカナ用語は分かりにくいので、日本語にして説明しました)
134
140
 
135
141
 
136
142
 
137
- | 私訳 | 既存訳 |
143
+ | 私訳 | 既存訳 |
138
144
 
139
145
  |--------------|--------------------------------|
140
146
 
147
+ | 組み立て係 | コンストラクター(constructor) |
148
+
141
- | 物体 | オブジェクト(object) |
149
+ | 物体 | オブジェクト(object) |
142
-
150
+
143
- |具現化する | インスタンシエイト(instantiate) |
151
+ | 具現化する | インスタンシエイト(instantiate) |
144
-
152
+
145
- |具現物 | インスタンス(instance) |
153
+ | 具現物 | インスタンス(instance) |
146
-
154
+
147
- |製造機 | コンストラクター(constructor) |
155
+ | 初期値化する | 初期化する(initialize) |
148
156
 
149
157
  | 性質 |プロパティ(property) |
150
158
 
@@ -166,4 +174,92 @@
166
174
 
167
175
 
168
176
 
177
+ **上記の回答部分に一文追記しました。重要部分&追記明瞭化のため、一文が太字になっています。**
178
+
179
+
180
+
181
+ # 通常の関数とコンストラクタ関数との違い
182
+
183
+
184
+
185
+ 通常関数とコンストラクタの違いを、表にして比較してみました。
186
+
187
+
188
+
189
+ | | 通常関数 | コンストラクタ |
190
+
191
+ | ------- | ------- | -------- |
192
+
193
+ | ❶目的 | 繰り返し行う作業をまとめ、作業の効率化。複数回記入→誤記入→エラー の削減のため | 同じような性質・術を備えた、複数の物体を作成するため |
194
+
195
+ | ❷`{}`内の定義の仕方 | 様々な処理を定義する | `this.性質名 = 値` or `this.術名 = function(){}` |
196
+
197
+ | ❸呼び出し | 識別子名 + `()` | `new` + 識別子名 |
198
+
199
+ | ❹返却値 | returnの有無による | 新しく作成された物体。コンストラクタで定義された性質・術が初期値化されている |
200
+
201
+
202
+
203
+
204
+
169
- **(追記したのですが、一部誤が発覚したため一時取りげしました???????? 訂正後再アップしますので、少々お待ち下さい(。•ㅅ•。)????)**
205
+ どちらも関数ですが、全くの別物と考えると分かやすかと思います。元々通常の関数(以下、通常関数)とコンストラクタ関数は、使用目的も呼び出方も全く異なります
206
+
207
+
208
+
209
+ 僕も最初はそうでしたが、ややこしい・わかった様な分からない様な…と感じる理由は
210
+
211
+
212
+
213
+ - どちらも`function`を使って定義されいる(関数である)
214
+
215
+ - 定義が抽象的
216
+
217
+
218
+
219
+ だからが大きい気がします。ですので、以下に分かりやすよう、コンストラクタ関数を`function`キーワードを用ず書き直してみました。
220
+
221
+
222
+
223
+ **通常関数**
224
+
225
+
226
+
227
+ ```js
228
+
229
+ function greetingTo( val ){
230
+
231
+ console.log("おはよう、"+ val);
232
+
233
+ };
234
+
235
+
236
+
237
+ greetingTo("悟空"); // "おはよう、悟空"
238
+
239
+ ```
240
+
241
+
242
+
243
+ **コンストラクタ関数**
244
+
245
+
246
+
247
+ ```js
248
+
249
+ CONSTRUCTOR AirMax(){
250
+
251
+ this.brand = "Nike";
252
+
253
+ this.shoesType = "Air Max";
254
+
255
+ };
256
+
257
+
258
+
259
+ new AirMax(); // 比較が分かりやすいよう、返却された具現物の割り当てはしていません
260
+
261
+ ```
262
+
263
+
264
+
265
+ こうすると、通常関数とコンストラクタでは、`{}`内の定義の仕方・呼び出し方の違いがより分かりやすいかと思います。

6

追記部 一時取り下げ

2019/06/05 06:38

投稿

退会済みユーザー
test CHANGED
@@ -166,208 +166,4 @@
166
166
 
167
167
 
168
168
 
169
- # 通常の関数とコンストラクタ関数との違い
170
-
171
- どちらも関数ですが、全くの別物と考えると分かやすかと思います。元々通常の関数(以下、通常関数)とコンストラクタ関数は、使用目的も呼び出方も全く異なります
169
+ **(追記したのですが、一部誤が発覚したため一時取りげしました???????? 訂正後再アップしますので、少々お待ち下さい(。•ㅅ•。)????)**
172
-
173
-
174
-
175
- ですので、分かりやすようコンストラクタ関数を`function`キーワードを用ず書き直してみました。
176
-
177
-
178
-
179
- **通常関数**
180
-
181
- ```js
182
-
183
- function greetingTo( val ){
184
-
185
- console.log("おはよう、"+ val);
186
-
187
- };
188
-
189
-
190
-
191
- greetingTo("悟空"); // "おはよう、悟空"
192
-
193
- ```
194
-
195
-
196
-
197
- **コンストラクタ**
198
-
199
- ```js
200
-
201
- CONSTRUCTOR AirMax(){
202
-
203
- this.brand = "Nike";
204
-
205
- this.shoesType = "Air Max";
206
-
207
- };
208
-
209
-
210
-
211
- new AirMax(); // 比較が分かりやすいよう、返却された具現物の割り当てはしていません
212
-
213
- ```
214
-
215
-
216
-
217
- こうすると、通常関数とコンストラクタでは、`{}`内の定義の仕方・呼び出し方の違いがより分かりやすいかと思います。
218
-
219
-
220
-
221
- 通常関数とコンストラクタの使用目的・呼び出し方の違いは以下の通りです。
222
-
223
-
224
-
225
- | | 通常関数 | コンストラクタ |
226
-
227
- | ------- | ------- | -------- |
228
-
229
- | ❶目的 | 繰り返し行う作業をまとめ、作業の効率化。複数回記入→誤記入→エラー の削減のため | 同じような性質・術を備えた、複数の物体を作成するため |
230
-
231
- | ❷`{}`内の定義の仕方 | 様々な処理を定義する | `this.性質名 = 値` or `this.術名 = function(){}` |
232
-
233
- | ❸呼び出し | 識別子名 + `()` | `new` + 識別子名 |
234
-
235
- | ❹返却値 | returnの有無による | 新しく作成された物体。コンストラクタで定義された性質・術を継承 |
236
-
237
-
238
-
239
- このように、全てにおいて違います。
240
-
241
-
242
-
243
- **ややこしいと感じる理由は、元のコードがどちらも`function`キーワードを使って定義されているから**です。コンストラクタは`function`というキーワードこそ使いますが、全くの別物だと思っておいて結構です。
244
-
245
-
246
-
247
- いいでしょうか。それでは書き方を元に戻しつつ、細かな違いやややこしさの詳細を見ていきましょう。
248
-
249
-
250
-
251
- # ややこしい理由
252
-
253
- ## どちらも`function`キーワードを使って定義する
254
-
255
- これは上記の通りです。
256
-
257
-
258
-
259
- ## コンストラクタ関数の定義が抽象的すぎる
260
-
261
- > **定義**
262
-
263
- > コンストラクタ関数とは、`new`操作記号によって呼び出された関数である。具現化された物体を返却する。
264
-
265
-
266
-
267
- ??。定義は確かにこれで合っています。が、コンストラクタ関数を初めて学ぶ人には、おそらく意味が全く分かりません。
268
-
269
-
270
-
271
- つまりこういう事です。
272
-
273
-
274
-
275
- 先ほどの、通常関数とコンストラクタの違いの表をもう一度見た後に、以下を見てください。
276
-
277
-
278
-
279
- **通常関数**
280
-
281
-
282
-
283
- ```js
284
-
285
- function greetingTo( val ){
286
-
287
- console.log("おはよう、"+ val);
288
-
289
- };
290
-
291
-
292
-
293
- greetingTo("悟空"); // "おはよう、悟空"
294
-
295
- ```
296
-
297
-
298
-
299
- **コンストラクタ**
300
-
301
-
302
-
303
- ```js
304
-
305
- function AirMax(){
306
-
307
- this.brand = "Nike";
308
-
309
- this.shoesType = "Air Max";
310
-
311
- };
312
-
313
-
314
-
315
- let airMax1 = new AirMax();
316
-
317
-
318
-
319
- _( airMax1.brand ) //-> "Nike"
320
-
321
- ```
322
-
323
-
324
-
325
- そうなんです。❶どちらも関数なんです(`function`キーワードを用いて定義されてる)。
326
-
327
-
328
-
329
- そして、「通常の関数」なのか「コンストラクタ関数」なのかを分ける決定的な違いは、その**呼び出し方**にあるのです。
330
-
331
-
332
-
333
- 通常関数は、`関数名()`で呼び出すのに対して、❷コンストラクタ関数は、`new 関数名()`のように**`new`を前に付けて呼び出す**のです。
334
-
335
-
336
-
337
- `new`によって呼び出されたコンストラクタ関数は、上記コードや先の対比表で見たように、具現化された物体を返却します。
338
-
339
- さて、ここでもう一度コンストラクタ関数の定義を見てみましょう。
340
-
341
-
342
-
343
- > **定義**
344
-
345
- > ❶コンストラクタ関数とは、❷`new`操作記号によって呼び出された関数である。❸具現化された物体を返却する。
346
-
347
-
348
-
349
- 定義が正しい事は分かって頂けたでしょうか。定義では、関数内については一切触れていません。
350
-
351
-
352
-
353
- 結局ややこしいと感じるのは、どちらも`function`を使って定義されており、呼び出し方で定義されているからなのです。(定義の仕方はこれで合っています。どちらも関数であり、正確に定義するにはこのような抽象的な定義になってしまいます)
354
-
355
-
356
-
357
- 実際は、最初に表記方法を変えたり違いを対比したりしましたが、使う目的も呼び出し方も全く違うのです。
358
-
359
-
360
-
361
-
362
-
363
- # まとめ
364
-
365
- ややこしいので、「コンストラクタは`function`キーワードを使わないでを定義すればいいじゃん」と思うかもしれません。ですが、そこには多分深い理由があります。多分、あるはずです…????w
366
-
367
-
368
-
369
- 僕も、現在あまりコンピューター科学には詳しくない中級見習いな者で、理由は明確には分かっていません。ですが、JavaScriptが他のオブジェクト指向言語とは違い、継承方法をコンストラクタ+プロトタイプベースにし、classを使わなかった*(1)事と同じように、おそらく言語作成者の意図がそこにはあるのだと思います。
370
-
371
-
372
-
373
- *(1)ECMA2015でclassも使えるようになりました。

5

細かな修正

2019/06/05 03:04

投稿

退会済みユーザー
test CHANGED
@@ -208,13 +208,13 @@
208
208
 
209
209
 
210
210
 
211
- new AirMax; // 比較が分かりやすいよう、返却された具現物の割り当てはしていません
211
+ new AirMax(); // 比較が分かりやすいよう、返却された具現物の割り当てはしていません
212
-
212
+
213
- ```
213
+ ```
214
-
215
-
216
-
214
+
215
+
216
+
217
- こうすると、通常関数とコンストラクタでは、`{}`内の定義の仕方・呼び出し方も全然う事が分かかと思います。
217
+ こうすると、通常関数とコンストラクタでは、`{}`内の定義の仕方・呼び出し方より分かりやすいかと思います。
218
218
 
219
219
 
220
220
 

4

用語参照推奨 追記

2019/06/04 13:46

投稿

退会済みユーザー
test CHANGED
@@ -162,7 +162,7 @@
162
162
 
163
163
 
164
164
 
165
- という部分に答えていなかった事に気付き????、 以下まとめてみました。もし参考になれば幸いです????
165
+ という部分に答えていなかった事に気付き????、 以下まとめてみました。もし参考になれば幸いです????(新たな独自用語がて出てきて分からない場合は、上の**用語**を参照下さい。追記しておきましたゆえ(。•ㅅ•。))
166
166
 
167
167
 
168
168
 

3

通常の関数とコンストラクタ関数との違い 追記

2019/06/04 13:43

投稿

退会済みユーザー
test CHANGED
@@ -145,3 +145,229 @@
145
145
  |具現物 | インスタンス(instance) |
146
146
 
147
147
  |製造機 | コンストラクター(constructor) |
148
+
149
+ | 性質 |プロパティ(property) |
150
+
151
+ | 術 | メソッド(method) |
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+ # 追記[19.06.04]
160
+
161
+ > 普通の関数と、コンストラクタ関数の違いはなんなのでしょうか。
162
+
163
+
164
+
165
+ という部分に答えていなかった事に気付き????、 以下まとめてみました。もし参考になれば幸いです????
166
+
167
+
168
+
169
+ # 通常の関数とコンストラクタ関数との違い
170
+
171
+ どちらも関数ですが、全くの別物と考えると分かりやすかと思います。元々、通常の関数(以下、通常関数)とコンストラクタ関数は、使用目的も呼び出し方も全く異なります。
172
+
173
+
174
+
175
+ ですので、分かりやすようコンストラクタ関数を`function`キーワードを用ず書き直してみました。
176
+
177
+
178
+
179
+ **通常関数**
180
+
181
+ ```js
182
+
183
+ function greetingTo( val ){
184
+
185
+ console.log("おはよう、"+ val);
186
+
187
+ };
188
+
189
+
190
+
191
+ greetingTo("悟空"); // "おはよう、悟空"
192
+
193
+ ```
194
+
195
+
196
+
197
+ **コンストラクタ**
198
+
199
+ ```js
200
+
201
+ CONSTRUCTOR AirMax(){
202
+
203
+ this.brand = "Nike";
204
+
205
+ this.shoesType = "Air Max";
206
+
207
+ };
208
+
209
+
210
+
211
+ new AirMax; // 比較が分かりやすいよう、返却された具現物の割り当てはしていません
212
+
213
+ ```
214
+
215
+
216
+
217
+ こうすると、通常関数とコンストラクタでは、`{}`内の定義の仕方・呼び出し方も全然違う事が分かるかと思います。
218
+
219
+
220
+
221
+ 通常関数とコンストラクタの使用目的・呼び出し方の違いは以下の通りです。
222
+
223
+
224
+
225
+ | | 通常関数 | コンストラクタ |
226
+
227
+ | ------- | ------- | -------- |
228
+
229
+ | ❶目的 | 繰り返し行う作業をまとめ、作業の効率化。複数回記入→誤記入→エラー の削減のため | 同じような性質・術を備えた、複数の物体を作成するため |
230
+
231
+ | ❷`{}`内の定義の仕方 | 様々な処理を定義する | `this.性質名 = 値` or `this.術名 = function(){}` |
232
+
233
+ | ❸呼び出し | 識別子名 + `()` | `new` + 識別子名 |
234
+
235
+ | ❹返却値 | returnの有無による | 新しく作成された物体。コンストラクタで定義された性質・術を継承 |
236
+
237
+
238
+
239
+ このように、全てにおいて違います。
240
+
241
+
242
+
243
+ **ややこしいと感じる理由は、元のコードがどちらも`function`キーワードを使って定義されているから**です。コンストラクタは`function`というキーワードこそ使いますが、全くの別物だと思っておいて結構です。
244
+
245
+
246
+
247
+ いいでしょうか。それでは書き方を元に戻しつつ、細かな違いやややこしさの詳細を見ていきましょう。
248
+
249
+
250
+
251
+ # ややこしい理由
252
+
253
+ ## どちらも`function`キーワードを使って定義する
254
+
255
+ これは上記の通りです。
256
+
257
+
258
+
259
+ ## コンストラクタ関数の定義が抽象的すぎる
260
+
261
+ > **定義**
262
+
263
+ > コンストラクタ関数とは、`new`操作記号によって呼び出された関数である。具現化された物体を返却する。
264
+
265
+
266
+
267
+ ??。定義は確かにこれで合っています。が、コンストラクタ関数を初めて学ぶ人には、おそらく意味が全く分かりません。
268
+
269
+
270
+
271
+ つまりこういう事です。
272
+
273
+
274
+
275
+ 先ほどの、通常関数とコンストラクタの違いの表をもう一度見た後に、以下を見てください。
276
+
277
+
278
+
279
+ **通常関数**
280
+
281
+
282
+
283
+ ```js
284
+
285
+ function greetingTo( val ){
286
+
287
+ console.log("おはよう、"+ val);
288
+
289
+ };
290
+
291
+
292
+
293
+ greetingTo("悟空"); // "おはよう、悟空"
294
+
295
+ ```
296
+
297
+
298
+
299
+ **コンストラクタ**
300
+
301
+
302
+
303
+ ```js
304
+
305
+ function AirMax(){
306
+
307
+ this.brand = "Nike";
308
+
309
+ this.shoesType = "Air Max";
310
+
311
+ };
312
+
313
+
314
+
315
+ let airMax1 = new AirMax();
316
+
317
+
318
+
319
+ _( airMax1.brand ) //-> "Nike"
320
+
321
+ ```
322
+
323
+
324
+
325
+ そうなんです。❶どちらも関数なんです(`function`キーワードを用いて定義されてる)。
326
+
327
+
328
+
329
+ そして、「通常の関数」なのか「コンストラクタ関数」なのかを分ける決定的な違いは、その**呼び出し方**にあるのです。
330
+
331
+
332
+
333
+ 通常関数は、`関数名()`で呼び出すのに対して、❷コンストラクタ関数は、`new 関数名()`のように**`new`を前に付けて呼び出す**のです。
334
+
335
+
336
+
337
+ `new`によって呼び出されたコンストラクタ関数は、上記コードや先の対比表で見たように、具現化された物体を返却します。
338
+
339
+ さて、ここでもう一度コンストラクタ関数の定義を見てみましょう。
340
+
341
+
342
+
343
+ > **定義**
344
+
345
+ > ❶コンストラクタ関数とは、❷`new`操作記号によって呼び出された関数である。❸具現化された物体を返却する。
346
+
347
+
348
+
349
+ 定義が正しい事は分かって頂けたでしょうか。定義では、関数内については一切触れていません。
350
+
351
+
352
+
353
+ 結局ややこしいと感じるのは、どちらも`function`を使って定義されており、呼び出し方で定義されているからなのです。(定義の仕方はこれで合っています。どちらも関数であり、正確に定義するにはこのような抽象的な定義になってしまいます)
354
+
355
+
356
+
357
+ 実際は、最初に表記方法を変えたり違いを対比したりしましたが、使う目的も呼び出し方も全く違うのです。
358
+
359
+
360
+
361
+
362
+
363
+ # まとめ
364
+
365
+ ややこしいので、「コンストラクタは`function`キーワードを使わないでを定義すればいいじゃん」と思うかもしれません。ですが、そこには多分深い理由があります。多分、あるはずです…????w
366
+
367
+
368
+
369
+ 僕も、現在あまりコンピューター科学には詳しくない中級見習いな者で、理由は明確には分かっていません。ですが、JavaScriptが他のオブジェクト指向言語とは違い、継承方法をコンストラクタ+プロトタイプベースにし、classを使わなかった*(1)事と同じように、おそらく言語作成者の意図がそこにはあるのだと思います。
370
+
371
+
372
+
373
+ *(1)ECMA2015でclassも使えるようになりました。

2

誤字修正

2019/06/04 13:39

投稿

退会済みユーザー
test CHANGED
@@ -130,7 +130,7 @@
130
130
 
131
131
  ## 用語
132
132
 
133
- (カタカナ用語は分かりにくいので、日本語にして説明ました)
133
+ (カタカナ用語は分かりにくいので、日本語にして説明ました)
134
134
 
135
135
 
136
136
 

1

誤字修正

2019/05/31 11:54

投稿

退会済みユーザー
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  | | |
24
24
 
25
- | 生産機 | コンストラクター関数 |
25
+ | 製造機 | コンストラクター関数 |
26
26
 
27
27
  | ↓ | ↓ |
28
28
 
@@ -134,12 +134,14 @@
134
134
 
135
135
 
136
136
 
137
- | 私訳 | 既存訳 |
137
+ | 私訳 | 既存訳 |
138
138
 
139
- |----------|--------------------------------|
139
+ |--------------|--------------------------------|
140
140
 
141
- | 物体 | オブジェクト(object) |
141
+ | 物体 | オブジェクト(object) |
142
142
 
143
- |具現化する | インスタンシエイト(instantiate) |
143
+ |具現化する | インスタンシエイト(instantiate) |
144
144
 
145
- |具現物 | インスタンス(instance) |
145
+ |具現物 | インスタンス(instance) |
146
+
147
+ |製造機 | コンストラクター(constructor) |