回答編集履歴

2

言い方をかえる。文法上の違いだけでではなく、動作も違う。C\+\+の話とかもたしたいけど、混乱するかな?

2016/04/16 03:01

投稿

raccy
raccy

スコア21733

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  ```
50
50
 
51
- 変数`a0`は生成と同時にAのオブジェクトで初期化しています。しかし、変数`a1`は生成したときは`undefined`に初期化されています(この動作はJavaScriptの仕様です)。そのあとに、Aのオブジェクトを代入しています。動作は同じすが、文法上は厳密に区別されます。例えば、varではなくconstを使った場合、`a1`の書き方はできません。※ constはECMAScript2015という新しい仕様から使えるようになった機能のため、古いブラウザでは使えません。
51
+ 変数`a0`は生成と同時にAのオブジェクトで初期化しています。しかし、変数`a1`は生成したときは`undefined`に初期化されています(この動作はJavaScriptの仕様です)。そのあとに、Aのオブジェクトを代入しています。最終的には同じになりますが、文法上は厳密に区別され、その動作も異なります。例えば、varではなくconstを使った場合、`a1`の書き方はできません。※ constはECMAScript2015という新しい仕様から使えるようになった機能のため、古いブラウザでは使えません。
52
52
 
53
53
 
54
54
 

1

オブジェクトが生成直後はどうなっているのか?をちょっと追加。あってる?

2016/04/16 03:01

投稿

raccy
raccy

スコア21733

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- では、JavaScirptに戻りましょう。JavaScriptはプロトタイプベースオブジェクト指向というちょっと変わったオブジェクト指向を採用しています(実用的に使われている他のプロトタイプベースオブジェクト指向言語はLuaぐらいです)。JavaScriptではプロトタイプを元にオブジェクトを生成します。しかし、先ほど述べたとおり、生成しただけでは初期化がされていないため、使えません。そこで初期化を行うために、プロトタイプ自身を関数として呼び出します。この初期化を行う関数部分を**コンストラクタ**と呼びます。こうして無事初期化されたオブジェクトを使用できます。
17
+ では、JavaScirptに戻りましょう。JavaScriptはプロトタイプベースオブジェクト指向というちょっと変わったオブジェクト指向を採用しています(実用的に使われている他のプロトタイプベースオブジェクト指向言語はLuaぐらいです)。JavaScriptではプロトタイプを元にオブジェクトを生成します。しかし、先ほど述べたとおり、生成しただけでは初期化がされていないため、使えません(JavaScriptでは`{}`という何もプロパティが入っていないオブジェクトが生成直後の状態です)。そこで初期化を行うために、プロトタイプ自身を関数として呼び出します。この初期化を行う関数部分を**コンストラクタ**と呼びます。こうして無事初期化されたオブジェクトを使用できます。
18
18
 
19
19
 
20
20