2014年10月4日土曜日

JavaScriptでクラスを実現する方法【暫定版】

JavaScriptでもECMAScript6になってようやく「クラス構文」が実装されようとしていますが、現在はまだほとんどのブラウザで実装が進んでいないようです。クラス構文の実装を待てない人は以下の方法でクラスを実現することができます。
※タイトルに【暫定版】とつけたのは現在のJSバージョン(ECMAScript6)にもうすぐクラス構文が実装される予定だからです。

一般的なクラス

// Class
var MyClass = function(arg) {
  
  // arguments
  this.arg = arg;
  
  // public properties
  this.prop = 123;

  // private methods
  var privateMethod = function() {
    return "private!";
  }

  // public methods
  this.publicMethod = function() { 
    return this.arg + this.prop; 
  }

}

var myclass = new MyClass("hoge");
myclass.prop = 999;
console.log(myclass.publicMethod()); // "hoge999"

これで少しJavaのクラスっぽくなりました。メモリの使い方的にはいまいちなところもあるかもしれませんが、コードはすっきりと見やすくなりメンテナンス性も高まると思います。

シングルトンクラス


ついでなのでシングルトンクラスを実現する方法も載せておきます。
// Singleton Class
var MySingleton = function() {

  // Make this class singleton
  if (arguments.callee._singletonInstance)
    return arguments.callee._singletonInstance;
  arguments.callee._singletonInstance = this;

  this.method = function() {
    return "I am SingletonClass.";
  }
}

var singleton1 = new MySingleton();
var singleton2 = new MySingleton();
console.log(singleton1 === singleton2); // true

if (arguments.callee._singletonInstance)...の部分でクラスをシングルトン化させています。クラスを利用する側はいつもどおりにnewしてインスタンスを生成して使いますが、何度newしてもちゃんとシングルトンとして動作します。
このやり方は利用者にシングルトンであることを意識させないというメリットがある一方で、シングルトンであることを意識させないがためにハマる危険性もあり、そのへんはトレードオフになると思います。

0 件のコメント:

コメントを投稿