• 追加された行はこの色です。
  • 削除された行はこの色です。
* クラスの作り方 - オブジェクトリテラルを使って [#f4b8ef24]
* オブジェクトリテラルを使ったクラス作成 - 応用 [#x989e164]

** クラスの作成 [#p55e2c0a]
 var foo = function (v1, v2) {
    var x = v1, y = v2;
 var Animal = function (name, age) {
   var that = {};
 
    var that = {};
   that.name    = name;
   that.age     = age;
   that.sayName = function () {
       alert("My name is " + this.name);
   }
    
    that.getSum = function () {
        return x + y;
    }
    
    return that;
   return that;
 };
foo()はコンストラクタであり、初期化処理後、オブジェクトリテラルを返す。

** クラスのインスタンスを作成・利用 [#v3e37dc3]
 var f = foo(1,2);
 f.getSum(); // => 3
Animal()はコンストラクタであり、初期化処理後、オブジェクトリテラル(that)を返す。

** オブジェクトリテラルを使ったクラスのメリット [#f2092a89]
クラス内の変数・関数を隠蔽出来る。この例の場合、foo()中のxやyはプライベート変数になっている。
** インスタンスを作成・メソッドを利用 [#v3e37dc3]
 var a = Animal("Taro", 10);
 a.sayName();

** 子クラスの作成 [#k186c407]
 var bar = function (v1, v2) {
    var n = 100;
*** オブジェクトリテラルを使ったクラスのメリット [#f2092a89]
クラス内の変数・関数を隠蔽出来る。この例の場合、thatにageをセットしなければ、ageはプライベート変数になる。

** 継承 [#k134b5ab]
*** 子クラスの作成 [#k186c407]
 var Dog = function (name, age) {
    var that = Animal(name, age);
 
    var that = foo(v1,v2);
    
    that.getSum2 = function () {
        return that.getSum() + n;
    that.sayAge = function () {
        alert("My age is " + this.age);
    }
    
 
    return that;
 }

thatを(空のオブジェクトリテラルではなく)foo()で初期化して、fooの継承を実現している。
thatを(空のオブジェクトリテラルではなく)Animal()で初期化して、Animalの継承を実現している。

** 子クラスのインスタンスを作成・利用 [#z5d89b00]
 var b = bar(1,2);
 b.getSum2(); // => 103
 b.getSum();  // => 3
*** 子クラスのインスタンスを作成・利用 [#z5d89b00]
 var d = Dog("Jiro", 5);
 d.sayName();
 d.sayAge()

** モジュールパターン [#w63b187f]
- sayName()は親クラスで定義、sayAge()は子クラスで定義されている。

モジュールパターンとはシングルトンパターンの一種で、オブジェクトのプロパティをパブリック・プライベートにする。Douglas Crockford氏によって提唱されたらしい。

 var module = function() {
 
     var v1 = null;
     var v2 = 10;
 
     function init(v) {
         v1 = v;
     };
     function func() {
         return _func();
     };
     function _func() {
         return v1 * v2;
     };
     function value() {
         return v1;
     }
     
     return {
         init  : init,
         func  : func,
         value : value
     };
 
 }();

- 無名関数によって変数や関数を局所化する。 
- オブジェクトリテラルを返すモジュールパターンによりグローバルからアクセス出来るようにする。
-  オブジェクトリテラルから内部の変数や関数を参照するようにする事で、内部の変数や関数の書式を一貫したものにする。

** 参考 [#ra57d02f]
- JavaScript "Best Practices"
- http://www.slideshare.net/cheilmann/javascript-best-practices-1041724


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS