- ベストアンサー
javascriptのオブジェクトのプロパティとは?
- JavaScriptのオブジェクトのプロパティに関して理解できない箇所があります。
- オブジェクトのメソッドをプロパティとして設定することで関数として呼び出すことができます。
- プロパティのなかにプロパティを設定することも可能です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
2行目:includesや3行目foreachはプロパティ名 関数がプロパティ値 2つあわせてrange.methodsのプロパティ JavaScriptにおいて多くのものはオブジェクト(Objectのインスタンス) オブジェクトじゃないものも暗黙でラッパーされてオブジェクトにされる
その他の回答 (4)
- think49
- ベストアンサー率59% (285/482)
「オブジェクトがプロパティの集合である」という概念は理解できているでしょうか。 var obj = {x: true, y: false}; // obj は プロパティ x,y の集合である var arr = [true, false]; // arr はプロパティ 0,1 の集合である JavaScript ではオブジェクトのプロパティにどんな値でも格納できます。 つまり、オブジェクトのプロパティにオブジェクトを格納することも当然できるわけです。 var foo = {x: true, y: false}; var piyo = {hoge: foo} // プロパティ hoge に オブジェクト foo を格納している alert(piyo.hoge.x); // true piyo.hoge はオブジェクト foo を「参照」しています。 ですので、piyo.hoge.x のように foo のプロパティ x を使用できるのです。 piyo.hoge が参照するのはあくまでオブジェクト foo ですから、プロパティにプロパティを設定するわけではありません。 プロパティに設定したオブジェクトから更にプロパティを参照している、と理解するのが適切かと思います。 > ということは、プロパティ=オブジェクトという結論に至ってしまいました。。 「プロパティ=オブジェクト」ではなく、プロパティがオブジェクトを参照していると覚えてください。 var obj = {x: true, y: false}; この例でいえば、「プロパティ === Boolean値」とはいわないでしょう? 「プロパティ名」と「プロパティ値」は明確に区別してください。
- takuhito_hihara
- ベストアンサー率40% (2/5)
実はここら辺の深い所は自分もあやふやなんですが、質問者の方の理解でよろしいかと思います。 osaka58さんはプロパティの中にプロパティが設定されているのが、しっくり来てないんだと思うんですが特に不思議なことではないです。 多次元の配列みたいな物で、オブジェクトの中にオブジェクトを設定しているということです。 説明が難しいですが、以下のコードが動くのは理解できますか? --------------------- コードここから --------------------- var hash = { aa: { bb: "bb" } }; alert(hash.aa.bb); // "bb"が出力される --------------------- コードここまで --------------------- それと下のコードも動くのも分かりますでしょうか? --------------------- コードここから --------------------- var method = function(){ alert("aa"); } method(); // alert("aa")が実行される --------------------- コードここまで --------------------- osaka58さんが書かれたコードは、おそらくこの2つのコードの合わせ技と考えて問題ないかと思います。 説明が分かりにくいかもしれませんが、理解の手助けになれば嬉しいです。
- osamuy
- ベストアンサー率42% (1231/2878)
このサンプル? http://books.google.co.jp/books?id=wz0Rpydy-iEC&pg=PA135&lpg=PA135&dq=javascript+%22range.methods%22+r.foreach+-okwave&source=bl&ots=OT2nIzOb06&sig=7NV5b349FUFE-3FmorrtQmJyUQY&hl=ja&sa=X&ei=czblUKT3D8romAXzjoCwCw&ved=0CC4Q6AEwAA#v=onepage&q=javascript%20%22range.methods%22%20r.foreach%20-okwave&f=false だとすると、osaka58さんの質問文に対しての回答はANo.1のとおりなんだけど、実際のところは、JavaScriptのオブジェクト指向の仕掛けについて、osaka58さんがどれだけ理解しているかを、回答者が把握しないと説明が難しそうな。
このmethodに設定されている値は、{ includes:○○ , foreach:○○ , toString: ○○ } という形の値になっている、ということはおわかりだと思います。これは、なんだかわかりますか? 一般に連想配列と呼ばれるものですね。すなわち、通常の配列のようにインデックス番号で値を指定するのでなく、名前をつけて値を管理するタイプの配列ですね。 そして、JavaScriptでは、オブジェクトというのは実は連想配列のこと(?)なのです。連想配列の中の値が、いわばオブジェクトの中のプロパティに相当するものである、と考えればよいと思います。 また、JavaScriptでは、関数そのものもオブジェクトとして扱うことができます。オブジェクトのプロパティに関数を代入すれば、それを呼び出すことでその関数が実行されます。こうした、オブジェクトのプロパティに関数が代入されているものをメソッドと呼びます。 ですから、r.inculdes(2)というのは、「rangeオブジェクトのincludesプロパティに設定された関数を実行している」ということであり、これを言い換えれば、「rangeオブジェクトのincludesメソッドを実行している」ということにもなります。 >プロパティのなかにプロパティを設定してる プロパティに、オブジェクトを設定しているのです。そのオブジェクトは関数である場合もありますし、そのオブジェクトの中に更にメソッドが用意されていることもあります。
お礼
さっそくの御回答本当にありがとうございます! まだちょっと腑に落ちない部分があり、ご質問させていただけたら助かります。 [プロパティに、オブジェクトを設定しているのです。] とご説明いただいておりますが、range関数(オブジェクト)のmethodsという名前のプロパティの値にinclude:function~などのプロパティ(関数が設定されてるこでここではメソッドとも言える)の集まりのオブジェクトを設定する。という意味でしょうか? 今回はメソッドの集まりだからオブジェクトになるのでしょうか? 仮にinclude: 'test'とかのプロパティの値が文字列だった場合も同様でしょうか? ということは、プロパティ=オブジェクトという結論に至ってしまいました。。 面倒くさい質問かと思いますがお知恵をお借りできれば助かります。