- ベストアンサー
オブジェクトやプロパティ、メソッドに付いて
今、JavaScriptを覚えようとしてるのですが、オブジェクトから訳が分からなくなってきました。 ゲームに例えたら、自機がオブジェクトで、プロパティが自機のステータスで、 メソッドがいろいろな動作をさせる関数って感じでいいんでしょうか? それと、オブジェクトは下のようにメソッドやパラメータを使用しますが、 パラメータ=="値" って感じなのでしょうか?? オブジェクト名.メソッド名(パラメータ); オブジェクト名.プロパティ名="値"; よろしくご指導お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どうも用語に惑わされているような気がします。 No.1で述べたとおり、JavaScriptにはプリミティブ型(Undefined型, Null型, Number型, String型, Boolean型)と、オブジェクト型(Object型)に分けられます。プリミティブ型以外は全てオブジェクト型です。 ただし、JavaScriptの変数はCのように明示的に型を指定する必要がなく、あらゆる型の値を自由に入れることができます。 var a = 0; // typeof(a) ---> "number" ---> Number型 a = new Number(0); // typeof(a) ---> "object" ---> Object型 オブジェクトは上記のようにnewを使って作成することが出来ます。また、関数・配列・連想配列など、newを使わずにオブジェクトを生成することも出来ます。例えば、以下の2つは(値が)同じ配列(オブジェクト)です。 var a1 = [1,2,3]; var a2 = new Array(1,2,3); ちなみにnewできるのは関数だけです。よって"alert(typeof(Array));"のようにすれば、Arrayは(Number, Stringなども)関数であることが確認できます。newはプロトタイプ型のオブジェクト指向と密接に関わってくるのですが、この辺に関しては追々理解すれば良いかと思います。 では「オブジェクトはプリミティブ型の値とどう違うのか」ですが、大雑把に言えば、オブジェクトは「プロパティ」というものを持てます。プロパティには"object.property"か"object['property']"の形でアクセスすることができます。以下、適当な例です。 var s = "string"; // String型 s.hoge = "hoge"; alert(s.hoge); // undefined s = new String(s); // Stringオブジェクト s.hoge = "hoge"; alert(s.hoge); // hoge alert(s['hoge']); // hoge ちなみに、varを付けずに変数を宣言するとグローバル変数になりますが、実を言うと、この「グローバル変数」というのは、windowオブジェクトのプロパティです。 // ローカル変数として(=varで)gを宣言していない状態で g = "hoge"; alert(window.g); // hoge >パラーメータ=="値"のところですが、メソッド(パラメータ)のカッコの中は、C言語などで言うところの実引数の「変数」と同じだったら、パラメータも変数のデータ「値」と同じもの よって、上記で「メソッド」と呼んでいるものは、実際には、オブジェクトのプロパティ(に関数が入ったもの)です。「パラメータ」というのは引数のことを言っているのだと思いますが、これはオブジェクトのプロパティとは関係ない、ただのローカルな変数です(Cと同じです)。 var obj = { say: function(s) { alert(s); }, s: "hoge" }; obj.say("huga"); // huga alert(obj.s); // hoge #他にもthisの問題など色々あるのですが、それも追々でしょうか。 ずいぶんと長々と書いてしまいましたが、あまり言葉に拘らずに、色々手を動かしてみるのが良いかと思います。 #簡単な実験をするのであれば、各ブラウザのデベロッパーツールのコンソールを利用すると便利です。(Firefoxの場合はFirebugの方が良いかもしれません。) #私もそれなりにJavaScriptについては勉強してきたつもりですが、知らないことがまだまだたくさんある、というか尽きることがないです。実践しながら気長に勉強するのが良いかと思います。
その他の回答 (1)
- LOHA
- ベストアンサー率52% (203/388)
JavaScriptには、変数の型として、プリミティブ型とオブジェクト型があります。 プリミティブ型の変数の例としては var i = 1, b = true, s = "string"; のi, b, sなどが挙げられます。 プリミティブ型は以外のものは全てオブジェクト型となります。 http://www.findxfine.com/programming/javascript/228.html string型とStringオブジェクト http://chaichan.web.infoseek.co.jp/src/javasc14.htm >ゲームに例えたら、自機がオブジェクトで、プロパティが自機のステータスで、 >メソッドがいろいろな動作をさせる関数って感じでいいんでしょうか? ゲームにたとえるのであれば、そのような感じの認識で大丈夫かと思います。 #私にとっては、逆にイメージしずらいのですが…(笑) >それと、オブジェクトは下のようにメソッドやパラメータを使用しますが、 >パラメータ=="値" って感じなのでしょうか?? >オブジェクト名.メソッド名(パラメータ); >オブジェクト名.プロパティ名="値"; この質問の意味がつかめないのですが、「パラメータ=="値" って感じ」とはどういうことを意図しているのでしょうか? 以下など参照してみるとよいかもしれません。 http://d.hatena.ne.jp/jdg/20090612/1244765780
補足
やさしく、説いてくださってありがとうございます。 えっと、パラーメータ=="値"のところですが、メソッド(パラメータ)のカッコの中は、C言語などで言うところの実引数の「変数」と同じだったら、パラメータも変数のデータ「値」と同じものなのかなと思ったんですが、配列変数もオブジェクトだとか書いてあるの見たら、余計わからなくなってきました。 。
お礼
親身にお答えくださってありがとうございます。 小さなソースから、少しずつでも理解を深めるよう学んでいきます。