質問: new Person('Hanako'); document.write(p1.name); ``` 質問(A) ここで質問なのですが、コンストラクタとは結局メソッドなのですか?オブジェクトなのでしょうか?例えば、上記の参考コードでも具体的にどこの部分が定義上のコンストラクタであり、それがどのような役割を果たしているのかが全く理解できません。。そもそもこのコードの中で登場するオブジェクトは{this.name....return this;}だけと理解しており、中には何もメソッドはないように私のような素人には見えるのですが。。このオブジェクトではthis.name=n;がプロパティなのかもしれませんが、何もメソッドはないようなに思ってしまします。メソッドではないとしたら、ここのコンストラクタとは一体何なのでしょうか? 単にPersonオブジェクトをnew演算子でインスタンス化してp1という変数にインスタンスが代入されただけではないのでしょうか? 質問(B) また、何を初期化しており、何のために初期化をしているのでしょうか?このコードから、初期化の過程と目的がうかがい知ることができません。 質問(C) 最後に最も根本的なことで申し訳ないのですが、 function Person(n){...} obj={animal:"dog"...} これらの波括弧の中身はどちらも「オブジェジクト」なのでしょうか?そもそもfunctionは自分で定義する関数として先に学んだのですが、これもオブジェクトの一つという整理なのでしょうか。また、関数を呼び出す場合、new演算子を使用することはないと思うのですが、なぜ上記の参考コードでは使用しているのでしょうか? すみません、あまりにもわからず、的を絞れずにとりとめもなく質問を記載させていただいてしましましたが、端的には1.コンストラクが何を指し、具体的にどのような役割なのかがわからない、2.オブジェクトでも関数のオブジェクトと通常のオブジェクトが何が違うのかがわからないということになりますでしょうか。 上記の参考コードをもとにできるだけ平易な内容でご回答を賜ることができれば大変嬉しいです。わがままを承知で申し上げているため、あらかじめ深いくお詫びを申し上げます。 よろしくお願い申し上げます。
回答: 他の回答者の補足をしますと、`new`演算子はつまるところコンストラクタの`this`を新しく作成したオブジェクトに束縛し、その`prototype` `__proto__` `constructor`といったプロパティを整えるものです。なので、やろうと思えば`new`演算子なしでもプロトタイプチェーンは実装できるはずです。 JavaScript の new 演算子の意味: Days on the Moon や...やっと理解できた!JavaScriptのプロトタイプチェーン - maeharin log newを封印して、JavaScriptでオブジェクト指向する(1): Architect Note