※タイトルに【暫定版】とつけたのは現在の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); // trueif (arguments.callee._singletonInstance)...の部分でクラスをシングルトン化させています。クラスを利用する側はいつもどおりにnewしてインスタンスを生成して使いますが、何度newしてもちゃんとシングルトンとして動作します。このやり方は利用者にシングルトンであることを意識させないというメリットがある一方で、シングルトンであることを意識させないがためにハマる危険性もあり、そのへんはトレードオフになると思います。
0 件のコメント:
コメントを投稿