※タイトルに【暫定版】とつけたのは現在の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 件のコメント:
コメントを投稿