ずいぶんとブログを更新してなかった。。
職場も変わってから半年以上経過しました。。
以前はFlashどっぷりでしたが、最近はJSどっぷりです。
というわけで、JSネタ。
JSのクラス風実装っていくらでもあるし、ライブラリも沢山あるけど、
プライベートメソッド、パブリックメソッド、プライベート変数とかを含んだ物をさくっと実装したいよって時の解決法。
ちなみに継承は考えてません。
そういう複雑なOOPを実装するのであれば、def.jsとか使えばいいと思う。
this._methodAとかでプライベートメソッドを呼び出すことはできません。
ちなみにこのプライベート変数は静的変数なので、インスタンス間で共有されるのでご注意を
職場も変わってから半年以上経過しました。。
以前はFlashどっぷりでしたが、最近はJSどっぷりです。
というわけで、JSネタ。
JSのクラス風実装っていくらでもあるし、ライブラリも沢山あるけど、
プライベートメソッド、パブリックメソッド、プライベート変数とかを含んだ物をさくっと実装したいよって時の解決法。
ちなみに継承は考えてません。
そういう複雑なOOPを実装するのであれば、def.jsとか使えばいいと思う。
var ClassA = function(){
this.initialize.apply(this, arguments);
}
ClassA.prototype = (function(){
//静的プライベート変数の定義
var _propA = 0,
_propB = "B";
function initialize(prop){
console.log(prop);
}
function _methodA(){
console.log("private methodA");
}
function methodB(){
console.log("public methodB");
}
//publicメソッドにしたい物だけオブジェクトとしてリターン
//リターンするオブジェクトに含まれない関数はプライベートメソッドになる
return {
initialize : initialize,
methodB : methodB
};
}());
いままでprototypeに直接オブジェクト突っ込んだりしてたけど、即時関数でくるめばスコープ持てるから静的プライベート変数定義できるじゃん!ってだけの話です。this._methodAとかでプライベートメソッドを呼び出すことはできません。
ちなみにこのプライベート変数は静的変数なので、インスタンス間で共有されるのでご注意を

Leave a comment