お世話になっております。
Javascriptの基礎的な部分を本気で理解しようとしているのですが、どうもどの参考書やサイトを見ても一足飛びのところがあり、腹落ちしない部分があります。
まず、私が文字通りで理解していることは
①オブジェクトとインスタンス
名前をキーにしてアクセスできる配列で、プロパティやメソッドにより構成されている。
例えば以下のような波括弧{...}を「オブジェクト」と呼ぶと理解しております。
var obj =
{animal:"dog"//プロパティ,
cry:function(){document.write("ワン");}//メソッド}
オブジェクトを使用するためにオブジェクトを複製したコピーをインスタンスと呼び、new演算子によりインスタンスを作ることができる。この一連の行為をインスタンス化と呼ぶ。
例えば、上記を踏まえて以下のような、オブジェクト変数 copyをobjの「インスタンス」と理解しております。
var copy = new obj();
②コンストラクタ
参考サイトのコンストラクタの説明を読むと以下のように解説されています。
コンストラクタはオブジェクトを作成し、初期化する関数オブジェクトである。
参考サイト:http://javascript.keicode.com/lang/constructors.php
また、とある書籍では以下のように説明しています。
引用テキスト
オブジェクトには、オブジェクトを初期化するために、オブジェクトと同名のメソッドが用意されおり、この初期化メソッドのことをコンストラクタと呼ぶ。オブジェクト名は正確にはコンストラクタ名である。
実際掲載されている参考コードは下記の通りです。
javascript
1function Person(n) { // Constructor 2 this.name = n; 3 return this; // opt. 4} 5 6var p1 = new Person('Hanako'); 7document.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.オブジェクトでも関数のオブジェクトと通常のオブジェクトが何が違うのかがわからないということになりますでしょうか。
上記の参考コードをもとにできるだけ平易な内容でご回答を賜ることができれば大変嬉しいです。わがままを承知で申し上げているため、あらかじめ深いくお詫びを申し上げます。
よろしくお願い申し上げます。
回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2016/12/08 02:55
2016/12/08 03:53
2016/12/08 04:09
2016/12/08 09:46
2016/12/08 10:54
2016/12/08 12:37
2019/11/21 08:53 編集
2019/11/21 11:30
2019/11/22 04:31
2019/11/22 10:06
2019/11/22 10:32
2019/11/28 02:54