JavaScriptのオブジェクトについて詰まったところのメモです。
JavaScriptはC++のようにプライベートとパブリックというプロパティがないので自分で意識して作成しなければいけないようです。
私が最初に詰まったのが、オブジェクトの作り方が何通りかあるということです。※1
スポンサードサーチ
関数をオブジェクトにするケース
関数を用いてオブジェクトを作成するクロージャと言われるものです。クロージャは関数内で定義された環境を覚えています。環境とは、「var x = 10」のことを指します。
「x」はローカル変数なのでプライベートな変数という扱いをします。関数内の変数なため、スコープ外からアクセスすることはできません。
1 2 3 4 5 6 7 8 9 10 |
var Func = function(){ var x = 10; return function(){ console.log(x); } } var sample = new Func(); sample(); //10 |
⇒プライベートなプロパティを持ったオブジェクト
プロパティを持ったオブジェクト
プロパティを持ったオブジェクトの場合は、以下のようにプロパティの値を変更することができます。つまり、パブリックなプロパティを持ついうことです。
1 2 3 4 5 6 7 8 9 10 11 |
var obj = { y:20, func:function(){ console.log(this.y); } } obj.func(); //20 obj.y=300; obj.func();//300 |
⇒パブリックなプロパティを持ったオブジェクト
プライベートとパブリックのプロパティを持つオブジェクト
上記の二つを組み合わせてプライベートとパブリックのプロパティを持つクラスっぽいオブジェクトを作ることができます。
関数内のローカル変数やオブジェクトはプライベートなプロパティで、パブリックなプロパティはreturnの部分で宣言して外部で使用できるようにします。
これもクロージャです。むしろ、これがクロージャの使い方なのかな?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
var Func = function(){ //プライベート var user = { id : 1192, name : "tanaka", old : 30 }; //パブリック return { //ゲッター getId:function(){ return user["id"]; }, //セッター setId:function(val){ user["id"] = val; } } } var func = new Func(); //プライベートなuser["name"]の内容を表示する console.log(func.getId()); //1192 //プライベートなuser["name"]にアクセスして値を変更する func.setId(20000); console.log(func.getId()); //20000 |
JavaScriptのオブジェクトの作り方、クロージャという概念は最初見たときは全くわかりませんでした。今も完璧にわかっているとは言えませんが・・・。独学だと難しいです。実際にどのように使われているか知りたいです。
※1 JavaScriptでは変数も関数もなんでもオブジェクトですが、ここでは他の言語でいう複数のプロパティを持ったクラスっぽいものを指します。