回答編集履歴

30

テキスト追加

2018/03/14 07:26

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -422,13 +422,13 @@
422
422
 
423
423
  いいえ、そうではありません。
424
424
 
425
- プロトタイプとは何か?を説明すると長くなってしまうので、以下
425
+ プロトタイプとは何か?を説明すると長くなってしまうので、ここで
426
426
 
427
427
  私がJSの基本書として信頼している、
428
428
 
429
429
  「徹底マスター JavaScriptの教科書」 第9章オブジェクト 9.1.2 プロトタイプ
430
430
 
431
- から、以下、引用ます。
431
+ から引用に留めておきます。
432
432
 
433
433
 
434
434
 

29

テキスト追加

2018/03/14 07:26

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -385,3 +385,151 @@
385
385
 
386
386
 
387
387
  という言い方になるでしょう。
388
+
389
+
390
+
391
+ ---
392
+
393
+ **追記4**
394
+
395
+
396
+
397
+ **1. test と test() の違い**
398
+
399
+
400
+
401
+ > 私が最初に書いた「test.sample()」は私は「test関数の中のsample関数を実行する」という意味だと思ってましたが、ここでの「test」は定義しただけの関数で実行されていないから、test.sample()と書いてもそもそも実行されていないtest関数の中のsample関数が実行されるわけがない、ということでしょうか。
402
+
403
+
404
+
405
+ はい。
406
+
407
+ そういう考え方で概ねよいと思います。
408
+
409
+ 使いたいのは、test そのものではなくて、 test を実行したときに返されるオブジェクトの sample プロパティなので、test() というふうに () が必要ということですね
410
+
411
+
412
+
413
+
414
+
415
+ **2. プロトタイプ**
416
+
417
+
418
+
419
+ > ちなみにプロトタイプというのはStringオブジェクトをDOMに変換した型?のことでしょうか。
420
+
421
+
422
+
423
+ いいえ、そうではありません。
424
+
425
+ プロトタイプとは何か?を説明すると長くなってしまうので、以下は
426
+
427
+ 私がJSの基本書として信頼している、
428
+
429
+ 「徹底マスター JavaScriptの教科書」 第9章オブジェクト 9.1.2 プロトタイプ
430
+
431
+ から、以下、引用します。
432
+
433
+
434
+
435
+ — 引用ここから —
436
+
437
+
438
+
439
+ > プロトタイプオブジェクト
440
+
441
+
442
+
443
+ > JavaScript の関数は、関数オブジェクトであり、関数オブジェクトは標準で
444
+
445
+ prototype プロパティを持っています。
446
+
447
+ >
448
+
449
+ > `function F() {};`
450
+
451
+
452
+
453
+ > `console.log(F.prototype); // → Object {} `
454
+
455
+
456
+
457
+ > 関数のprototype プロパティが参照しているオブジェクトを、その関数の
458
+
459
+ プロトタイプオブジェクトといいます。
460
+
461
+ デフォルトでは、 prototypeプロパティは空のオブジェクトを参照しています。
462
+
463
+
464
+
465
+ > プロトタイプオブジェクトのプロパティは、コンストラクタによって生成されたすべての
466
+
467
+ インスタンスから、あたかもそのインスタンスのプロパティであるかのように参照できます。
468
+
469
+
470
+
471
+ — 引用ここまで —
472
+
473
+
474
+
475
+ 今現在、webstrerさんは、初学者とのことですので、学習を進めていったときに、
476
+
477
+ いずれ出てくると思いますので、現時点では、「そういうものがあるんだ」程度の理解で
478
+
479
+ 大丈夫です。
480
+
481
+
482
+
483
+ **3. 「評価」という概念について**
484
+
485
+
486
+
487
+ プログラミング初学者の段階で、「評価」の厳密な定義を調べたり、覚えたりする必要はなく、
488
+
489
+ ごく直感的に、式を計算した結果とか、関数を実行した結果、ぐらいに思っておけば問題
490
+
491
+ ないです。
492
+
493
+
494
+
495
+ たとえば
496
+
497
+
498
+
499
+ ・`1+1` を評価すると、2 です。
500
+
501
+
502
+
503
+ ・`"Hello".toUpperCase()` を評価すると “HELLO” です。
504
+
505
+
506
+
507
+ ・`100` を評価すると、100 です。
508
+
509
+
510
+
511
+ みたいな感じです。
512
+
513
+
514
+
515
+
516
+
517
+ いろいろ脇道にそれたことをつけ加えた回答になり、
518
+
519
+ かえって混乱させてしまっていたら、すみません。
520
+
521
+
522
+
523
+ 初学者のうちは、「これの考え方は、こうでいいのか?」という疑問が、いろいろ
524
+
525
+ 出てくるとは思いますが、ある程度割り切って、
526
+
527
+ 「今のところはこう考えておいて、あとでつじつまが合わないことが出てきたら、
528
+
529
+ そのときに考え方を修正しよう」
530
+
531
+ ということで進めていくことも、けっこう大事です。
532
+
533
+ その上で、どうしてもここは突っ込んで理解しておきたい、という疑問が出てくれば、
534
+
535
+ また、新たなご質問として投稿されるとよろしいかと思います。

28

テキスト修正

2018/03/14 05:13

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -294,7 +294,7 @@
294
294
 
295
295
 
296
296
 
297
- のいずれの場合当てはりますし、さらに、ご質問のコードには無い例として
297
+ のいずれの場合も説明がつきますし、さらに、ご質問のコードには無い例として
298
298
 
299
299
 
300
300
 
@@ -308,7 +308,11 @@
308
308
 
309
309
  文字列で、文字列は `toUpperCase()` 関数を呼ぶことができて、
310
310
 
311
- 結果としては `"HELLO WORLD"` が得られます。
311
+ 結果としては `"HELLO WORLD"` が得られることについても
312
+
313
+ 矛盾しません。
314
+
315
+
312
316
 
313
317
  ですので、
314
318
 

27

テキスト修正

2018/03/11 14:44

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -80,11 +80,11 @@
80
80
 
81
81
 
82
82
 
83
- 上記では、 `test` に関数を代入していますが、これを、関数を実行した結果
83
+ 上記では、 `test` に関数を代入していますが、これを、関数が返す値が
84
84
 
85
85
  `test` に入るように修正します。
86
86
 
87
- そのために、以下のように、最後の `}` の後に、 `()` を追加して
87
+ そのために、以下のように、最後の `}` の後に、 `()` を追加して
88
88
 
89
89
 
90
90
 

26

テキスト修正

2018/03/11 14:37

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -352,13 +352,13 @@
352
352
 
353
353
  実状は少し違っていて、`"hello world"` という文字列が、`toUpperCase` を持って
354
354
 
355
- いるのはなく、 Stringオブジェのプロトタイプである`String.prototype` 
355
+ いるのはなく、 Stringクラスのプロトタイプである`String.prototype` 
356
356
 
357
357
  が `toUpperCase` を持っていて、
358
358
 
359
359
  `"hello world".toUpperCase()`
360
360
 
361
- としたときは、`String.prototype` の持っている `toUpperCase()` が呼ばれます。
361
+ としたときは、この `String.prototype` の持っている `toUpperCase()` が呼ばれます。
362
362
 
363
363
  ですので、この状況までも含めるならば、
364
364
 

25

テキスト修正

2018/03/11 14:33

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -80,9 +80,11 @@
80
80
 
81
81
 
82
82
 
83
- 上記で、 `test` に関数を代入するのではなく、関数を実行した
83
+ 上記で、 `test` に関数を代入していまこれを、関数を実行した結果が
84
+
84
-
85
+ `test` に入るように修正します。
86
+
85
- 結果を入れるために、以下のように、最後の `}` の後に、 `()` を追加して
87
+ そのために、以下のように、最後の `}` の後に、 `()` を追加して
86
88
 
87
89
 
88
90
 

24

テキスト修正

2018/03/11 14:11

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -292,7 +292,7 @@
292
292
 
293
293
 
294
294
 
295
- のいずれの場合にも当てはまりますし、さらには
295
+ のいずれの場合にも当てはまりますし、さらに、ご質問のコードに無い例として
296
296
 
297
297
 
298
298
 

23

テキスト修正

2018/03/11 14:05

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -346,11 +346,13 @@
346
346
 
347
347
  追記2で提示した考え方を説明する最後の例では、 文字列 `"hello world"` が `toUpperCase`
348
348
 
349
- という関数型のプロパティを持っているかのように思われてしまうかもしれませんが、実状は少し違っていて、
349
+ という関数型のプロパティを持っているかのように思われてしまうかもしれませんが、
350
-
350
+
351
- `"hello world"` という文字列が、`toUpperCase` を持っているのはなく、 Stringオブジェクト
351
+ 実状は少し違っていて、`"hello world"` という文字列が、`toUpperCase` を持って
352
+
352
-
353
+ いるのはなく、 Stringオブジェクトのプロトタイプである`String.prototype` 
354
+
353
- のプロトタイプである`String.prototype` が `toUpperCase` を持っていて、
355
+ が `toUpperCase` を持っていて、
354
356
 
355
357
  `"hello world".toUpperCase()`
356
358
 

22

テキスト修正

2018/03/11 13:07

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -344,19 +344,17 @@
344
344
 
345
345
 
346
346
 
347
- 提示した考え方を説明する最後の例では、 文字列 "hello world" が `toUpperCase`
347
+ 追記2で提示した考え方を説明する最後の例では、 文字列 `"hello world"` が `toUpperCase`
348
-
348
+
349
- という関数型のプロパティを持っているかのように解釈されてしまが、実状は少し違っていて、
349
+ という関数型のプロパティを持っているかのように思われてしまうかもしれせんが、実状は少し違っていて、
350
+
350
-
351
+ `"hello world"` という文字列が、`toUpperCase` を持っているのはなく、 Stringオブジェクト
352
+
353
+ のプロトタイプである`String.prototype` が `toUpperCase` を持っていて、
354
+
351
- "hello world" という Stringオブジェクト自体が、`toUpperCase`
355
+ `"hello world".toUpperCase()`
352
-
353
- 持っているのはなく、 Stringオブジェクト のプロトタイプである
356
+
354
-
355
- `String.prototype` が、`toUpperCase` を持っていて、`"hello world".toUpperCase()`
356
-
357
- としたときは、`String.prototype` の持っている `toUpperCase()` が呼ばれます。
357
+ としたときは、`String.prototype` の持っている `toUpperCase()` が呼ばれます。
358
-
359
-
360
358
 
361
359
  ですので、この状況までも含めるならば、
362
360
 
@@ -368,9 +366,11 @@
368
366
 
369
367
  と書きたい時には、
370
368
 
371
- 〇〇 が評価された結果のオブジェクト、あるいは、そのオブジェクトの(プロトタイプチェーン上の、
369
+ 〇〇 が評価された結果のオブジェクト、あるいは、そのオブジェクトの
370
+
372
-
371
+ (プロトタイプチェーン上にある、いずれかの)プロトタイプが △△という
372
+
373
- いずれかの)プロトタイプが △△というプロパティを持っていて、その△△が関数である必要がある。
373
+ プロパティを持っていて、その△△が関数である必要がある。
374
374
 
375
375
  ```
376
376
 

21

テキスト修正

2018/03/11 13:06

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -368,9 +368,9 @@
368
368
 
369
369
  と書きたい時には、
370
370
 
371
- 〇〇 が評価された結果のオブジェクト、あるいは、そのオブジェクトのプロトタイプ
371
+ 〇〇 が評価された結果のオブジェクト、あるいは、そのオブジェクトのプロトタイプチェーン上の、
372
-
372
+
373
- △△というプロパティを持っていて、その△△が関数である必要がある。
373
+ いずれかの)プロトタイプが △△というプロパティを持っていて、その△△が関数である必要がある。
374
374
 
375
375
  ```
376
376
 

20

テキスト修正

2018/03/11 12:21

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  ---
50
50
 
51
- **追記**
51
+ **追記1**
52
52
 
53
53
 
54
54
 
@@ -176,7 +176,7 @@
176
176
 
177
177
 
178
178
 
179
- 先の追記では、即時関数を使いましたが、
179
+ 先の追記1 では、即時関数を使いましたが、
180
180
 
181
181
  `〇〇.△△()` と書きたいときに、 `〇〇`が即時関数で得られた
182
182
 
@@ -264,7 +264,7 @@
264
264
 
265
265
  とすればよいと書きましたが、このような、`〇〇` が関数の呼び出しになっている場合も含めて、
266
266
 
267
- より広く当てはまるように言い換えるならば、**評価** という言葉を使って、
267
+ より広く当てはまるように言い換えるならば、**評価(evaluation)** という言葉を使って、
268
268
 
269
269
 
270
270
 

19

テキスト修正

2018/03/11 12:09

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
 
54
54
 
55
- もうひとつ、別の修正方法があります。
55
+ もうひとつ、別の考え方の修正方法があります。
56
56
 
57
57
 
58
58
 
@@ -140,9 +140,9 @@
140
140
 
141
141
 
142
142
 
143
- こうすれば、 `test` が、関数型の`sample` プロパティを持つので、
143
+ こうすれば、 `test` が、関数型の`sample` プロパティを持つので、`sample()`を
144
-
144
+
145
- `test.sample()` と書けます。
145
+ 実行するために、`test.sample()` と書けます。
146
146
 
147
147
 
148
148
 

18

テキスト修正

2018/03/11 12:06

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -280,7 +280,7 @@
280
280
 
281
281
  ```
282
282
 
283
- と理解しておけばよいと思います。これであれば
283
+ 理解しておけばよいと思います。これであれば
284
284
 
285
285
 
286
286
 

17

テキスト修正

2018/03/11 11:27

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -172,19 +172,21 @@
172
172
 
173
173
 
174
174
 
175
- と理解しておくとよいかと思います。
175
+ いうことを理解しておくとよいかと思います。
176
+
177
+
178
+
176
-
179
+ 先の追記では、即時関数を使いましたが、
180
+
177
- というのは、 `〇〇.△△()` と書きたいときに、 `〇〇`が即時関数で得られた
181
+ `〇〇.△△()` と書きたいときに、 `〇〇`が即時関数で得られた
178
-
182
+
179
- オブジェクトでなければならないわけではないからです。
183
+ オブジェクトでなければならないわけではないです。
180
-
181
-
182
-
184
+
183
- たとえば、回答に別解として、即時関数を使う方法を挙げましたが
185
+ たとえば、ご質問のコードでは、即時関数を使わずとも
184
-
186
+
185
- 即時関数を使わずとも、`test` に `sample`プロパティを持つ
187
+ `test` に `sample`プロパティを持つオブジェクトを
186
-
188
+
187
- オブジェクトをそのまま代入して
189
+ そのまま代入して
188
190
 
189
191
 
190
192
 

16

テキスト修正

2018/03/11 11:26

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -300,13 +300,11 @@
300
300
 
301
301
  のように、○○が式になっていても、
302
302
 
303
-
304
-
305
303
  “hello” + “ world” という式が評価された結果は “hello world” という
306
304
 
307
- 文字列で、文字列は`toUpperCase()` 関数を呼べるので、
305
+ 文字列で、文字列は `toUpperCase()` 関数を呼ぶことがきて
308
-
306
+
309
- 上記の結果として `"HELLO WORLD"` が得られます。
307
+ 結果として `"HELLO WORLD"` が得られます。
310
308
 
311
309
  ですので、
312
310
 

15

テキスト修正

2018/03/11 10:43

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -335,3 +335,45 @@
335
335
  プログラミングの基礎用語ですので、「javascript 式 評価」でググって、
336
336
 
337
337
  分かりやすそうな記事を2,3読んでおかれるとよいかと思います。
338
+
339
+
340
+
341
+ ---
342
+
343
+ **追記3**
344
+
345
+
346
+
347
+ 提示した考え方を説明する、最後の例では、 文字列 "hello world" が `toUpperCase`
348
+
349
+ という関数型のプロパティを持っているかのように解釈されてしまいますが、実状は少し違っていて、
350
+
351
+ "hello world" という Stringオブジェクト自体が、`toUpperCase` を
352
+
353
+ 持っているのはなく、 Stringオブジェクト のプロトタイプである
354
+
355
+ `String.prototype` が、`toUpperCase` を持っていて、`"hello world".toUpperCase()`
356
+
357
+ としたときは、`String.prototype` の持っている `toUpperCase()` が呼ばれます。
358
+
359
+
360
+
361
+ ですので、この状況までも含めるならば、
362
+
363
+
364
+
365
+ ```
366
+
367
+ 〇〇.△△()
368
+
369
+ と書きたい時には、
370
+
371
+ 〇〇 が評価された結果のオブジェクト、あるいは、そのオブジェクトのプロトタイプが
372
+
373
+ △△というプロパティを持っていて、その△△が関数である必要がある。
374
+
375
+ ```
376
+
377
+
378
+
379
+ という言い方になるでしょう。

14

テキスト修正

2018/03/11 10:06

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
File without changes

13

テキスト修正

2018/03/11 09:57

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -302,11 +302,13 @@
302
302
 
303
303
 
304
304
 
305
- “hello” + “ world” という式が評価された結果は “hello world” である。
305
+ “hello” + “ world” という式が評価された結果は “hello world” という
306
+
306
-
307
+ 文字列で、文字列は、`toUpperCase()` 関数を呼べるので、
308
+
307
-
309
+ 上記の結果として `"HELLO WORLD"` が得られます。
308
-
310
+
309
- という日本語は正しいので、
311
+ ですので、
310
312
 
311
313
 
312
314
 

12

テキスト修正

2018/03/11 09:57

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -278,7 +278,7 @@
278
278
 
279
279
  ```
280
280
 
281
- 覚えておけばよいと思います。これであれば
281
+ 理解しておけばよいと思います。これであれば
282
282
 
283
283
 
284
284
 
@@ -302,7 +302,7 @@
302
302
 
303
303
 
304
304
 
305
- “hello” + “ world” という式評価た結果は “hello world” である。
305
+ “hello” + “ world” という式評価された結果は “hello world” である。
306
306
 
307
307
 
308
308
 

11

テキスト修正

2018/03/11 09:31

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -172,7 +172,7 @@
172
172
 
173
173
 
174
174
 
175
- 覚えておくとよいかと思います。
175
+ 理解しておくとよいかと思います。
176
176
 
177
177
  というのは、 `〇〇.△△()` と書きたいときに、 `〇〇`が即時関数で得られた
178
178
 

10

テキスト修正

2018/03/11 09:29

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -324,7 +324,7 @@
324
324
 
325
325
 
326
326
 
327
- と覚えておくのが様々なパターンを包含しているといえます。
327
+ と覚えておく(というか、理解しておく)のが様々なパターンを包含しているといえます。
328
328
 
329
329
 
330
330
 

9

テキスト修正

2018/03/11 09:28

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -262,7 +262,7 @@
262
262
 
263
263
  とすればよいと書きましたが、このような、`〇〇` が関数の呼び出しになっている場合も含めて、
264
264
 
265
- 広く言い換えると、
265
+ より広く当てはまるように言い換えるならば、**評価** いう言葉を使って
266
266
 
267
267
 
268
268
 

8

テキスト修正

2018/03/11 09:22

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -222,7 +222,7 @@
222
222
 
223
223
 
224
224
 
225
- また、回答初めに書いた修正のほうでは、`test` を関数のままにしておいて、
225
+ また、回答初めに書いたほうの修正では、`test` を関数のままにしておいて、
226
226
 
227
227
 
228
228
 
@@ -278,7 +278,7 @@
278
278
 
279
279
  ```
280
280
 
281
- と覚えておけば
281
+ と覚えておけばよいかと思います。これであれば
282
282
 
283
283
 
284
284
 

7

テキスト追加

2018/03/11 09:17

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -143,3 +143,193 @@
143
143
  こうすれば、 `test` が、関数型の`sample` プロパティを持つので、
144
144
 
145
145
  `test.sample()` と書けます。
146
+
147
+
148
+
149
+ ---
150
+
151
+ **追記2**
152
+
153
+
154
+
155
+ > メソッドチェーン(←使い方が適切かわかりませんが)として「〇〇.△△();」と書きたい時には”〇〇”の部分は即時関数などを使って既に実行されている必要があると考えておけば大丈夫でしょうか。
156
+
157
+
158
+
159
+ とのことですが、考え方としては
160
+
161
+
162
+
163
+ ```
164
+
165
+ 〇〇.△△()
166
+
167
+ と書きたい時には、
168
+
169
+ 〇〇 は△△というプロパティを持っていて、その△△が関数である必要がある。
170
+
171
+ ```
172
+
173
+
174
+
175
+ と覚えておくとよいかと思います。
176
+
177
+ というのは、 `〇〇.△△()` と書きたいときに、 `〇〇`が即時関数で得られた
178
+
179
+ オブジェクトでなければならないわけではないからです。
180
+
181
+
182
+
183
+ たとえば、回答に別解として、即時関数を使う方法を挙げましたが、
184
+
185
+ 即時関数を使わずとも、`test` に `sample`プロパティを持つ
186
+
187
+ オブジェクトをそのまま代入して
188
+
189
+
190
+
191
+ ```javascript
192
+
193
+ var test = {
194
+
195
+ sample: function () {
196
+
197
+ console.log("a")
198
+
199
+ var a = 1;
200
+
201
+ }
202
+
203
+ };
204
+
205
+ ```
206
+
207
+
208
+
209
+ としておけば、
210
+
211
+
212
+
213
+ ```javascript
214
+
215
+ test.sample();
216
+
217
+ ```
218
+
219
+
220
+
221
+ と呼べます。
222
+
223
+
224
+
225
+ また、回答に初めに書いた修正のほうでは、`test` を関数のままにしておいて、
226
+
227
+
228
+
229
+ ```javascript
230
+
231
+ var test = function() {
232
+
233
+ return {
234
+
235
+ sample: function () {
236
+
237
+ console.log("a")
238
+
239
+ var a = 1;
240
+
241
+ }
242
+
243
+ };
244
+
245
+ };
246
+
247
+ ```
248
+
249
+
250
+
251
+ としておくならば
252
+
253
+
254
+
255
+ ```javascript
256
+
257
+ test().sample();
258
+
259
+ ```
260
+
261
+
262
+
263
+ とすればよいと書きましたが、このような、`〇〇` が関数の呼び出しになっている場合も含めて、
264
+
265
+ 広く言い換えると、
266
+
267
+
268
+
269
+ ```
270
+
271
+ 〇〇.△△()
272
+
273
+ と書きたい時には、
274
+
275
+ 〇〇 が評価された結果が、△△というプロパティを持っていて、
276
+
277
+ その△△が関数である必要がある。
278
+
279
+ ```
280
+
281
+ と覚えておけば、
282
+
283
+
284
+
285
+ `test.sample()`
286
+
287
+
288
+
289
+ `test().sample()`
290
+
291
+
292
+
293
+ のいずれの場合にも当てはまりますし、さらには、
294
+
295
+
296
+
297
+ `("hello" + " world").toUpperCase()`
298
+
299
+
300
+
301
+ のように、○○が式になっていても、
302
+
303
+
304
+
305
+ “hello” + “ world” という式を評価した結果は “hello world” である。
306
+
307
+
308
+
309
+ という日本語は正しいので、
310
+
311
+
312
+
313
+ ```
314
+
315
+ 〇〇.△△()
316
+
317
+ と書きたい時には、
318
+
319
+ 〇〇 が評価された結果が、△△というプロパティを持っていて、
320
+
321
+ その△△が関数である必要がある。
322
+
323
+ ```
324
+
325
+
326
+
327
+ と覚えておくのが様々なパターンを包含しているといえます。
328
+
329
+
330
+
331
+ この、「評価」あるいは「評価する」という用語は、 javascript に限らず、
332
+
333
+ プログラミングの基礎用語ですので、「javascript 式 評価」でググって、
334
+
335
+ 分かりやすそうな記事を2,3読んでおかれるとよいかと思います。

6

テキスト修正

2018/03/11 09:14

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
  上記で、 `test` に関数を代入するのではなく、関数を実行した
84
84
 
85
- 結果を入れるために、以下のように、`}` の後に、 `()` を追加して
85
+ 結果を入れるために、以下のように、最後の `}` の後に、 `()` を追加して
86
86
 
87
87
 
88
88
 

5

テキスト追加

2018/03/11 01:52

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -82,9 +82,7 @@
82
82
 
83
83
  上記で、 `test` に関数を代入するのではなく、関数を実行した
84
84
 
85
- 結果を入れるために、以下のように、`}` の後に `()` を追加して
85
+ 結果を入れるために、以下のように、`}` の後に `()` を追加して
86
-
87
- 即時実行させます。
88
86
 
89
87
 
90
88
 
@@ -110,6 +108,36 @@
110
108
 
111
109
  ```
112
110
 
111
+ とするか、または、最後の `)` の後に、 `()` を追加して
112
+
113
+
114
+
115
+ **修正後:**
116
+
117
+ ```
118
+
119
+ var test = (function () {
120
+
121
+ return {
122
+
123
+ sample: function () {
124
+
125
+ console.log("a")
126
+
127
+ var a = 1;
128
+
129
+ }
130
+
131
+ }
132
+
133
+ })();
134
+
135
+ ```
136
+
137
+
138
+
139
+ として、**即時関数**(IIFE: Immediately Invokable Function Expressions) にします。
140
+
113
141
 
114
142
 
115
143
  こうすれば、 `test` が、関数型の`sample` プロパティを持つので、

4

テキスト修正

2018/03/11 01:43

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -36,10 +36,6 @@
36
36
 
37
37
 
38
38
 
39
- 以下、補足の説明です。
40
-
41
-
42
-
43
39
  修正前の`test.sample()` だと、 `test`自体に `sample`という関数型のプロパティがあって、
44
40
 
45
41
  それを実行するという意図のコードになってしまいますが、`sample`プロパティを持っているのは
@@ -47,3 +43,75 @@
47
43
  `test`そのものではなくて、関数型である`test` を実行したときの返り値のオブジェクトですので、
48
44
 
49
45
  `test().sample()` とすれば意図した動作になります。
46
+
47
+
48
+
49
+ ---
50
+
51
+ **追記**
52
+
53
+
54
+
55
+ もうひとつ、別の修正方法があります。
56
+
57
+
58
+
59
+ **修正前:**
60
+
61
+ ```javascript
62
+
63
+ var test = (function () {
64
+
65
+ return {
66
+
67
+ sample: function () {
68
+
69
+ console.log("a")
70
+
71
+ var a = 1;
72
+
73
+ }
74
+
75
+ }
76
+
77
+ });
78
+
79
+ ```
80
+
81
+
82
+
83
+ 上記で、 `test` に関数を代入するのではなく、関数を実行した
84
+
85
+ 結果を入れるために、以下のように、`}` の後に `()` を追加して
86
+
87
+ 即時実行させます。
88
+
89
+
90
+
91
+ **修正後:**
92
+
93
+ ```
94
+
95
+ var test = (function () {
96
+
97
+ return {
98
+
99
+ sample: function () {
100
+
101
+ console.log("a")
102
+
103
+ var a = 1;
104
+
105
+ }
106
+
107
+ }
108
+
109
+ }());
110
+
111
+ ```
112
+
113
+
114
+
115
+ こうすれば、 `test` が、関数型の`sample` プロパティを持つので、
116
+
117
+ `test.sample()` と書けます。

3

テキスト修正

2018/03/11 01:33

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -36,7 +36,9 @@
36
36
 
37
37
 
38
38
 
39
- 解説を補足しまと、
39
+ 以下、補足の説明で
40
+
41
+
40
42
 
41
43
  修正前の`test.sample()` だと、 `test`自体に `sample`という関数型のプロパティがあって、
42
44
 
@@ -44,4 +46,4 @@
44
46
 
45
47
  `test`そのものではなくて、関数型である`test` を実行したときの返り値のオブジェクトですので、
46
48
 
47
- `test().sample();` とすれば意図した動作になります。
49
+ `test().sample()` とすれば意図した動作になります。

2

テキスト修正

2018/03/11 01:16

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -33,3 +33,15 @@
33
33
 
34
34
 
35
35
  とすればよいかと思います。
36
+
37
+
38
+
39
+ 解説を補足しますと、
40
+
41
+ 修正前の`test.sample()` だと、 `test`自体に `sample`という関数型のプロパティがあって、
42
+
43
+ それを実行するという意図のコードになってしまいますが、`sample`プロパティを持っているのは
44
+
45
+ `test`そのものではなくて、関数型である`test` を実行したときの返り値のオブジェクトですので、
46
+
47
+ `test().sample();` とすれば意図した動作になります。

1

テキスト修正

2018/03/11 01:12

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
 
5
5
 
6
+
7
+ **修正前:**
6
8
 
7
9
  ```javascript
8
10
 
@@ -12,11 +14,13 @@
12
14
 
13
15
 
14
16
 
15
- の、test の後に () を追加して
17
+ の、`test` の後に `()` を追加して
16
18
 
17
19
 
18
20
 
21
+ **修正後:**
22
+
19
- ```javascript
23
+ ```JavaScript
20
24
 
21
25
 
22
26