基本的なjavascript構文
newで生成するインスタンス関数
この構文は以下の要素をもつ
- private property
- private method(__constractor)
- static property
- public static method
特徴
privateなインスタンスプロパティへの参照をもったpublic staticメソッドをもつ。
privateへの参照を外部に渡さないために、setterメソドは用意しない。 (必要なインスタンスプロパティはインスタンス生成時に渡す)
public staticメソッド部分をprototypeで宣言。 __constractor部でprototypeへprivateプロパティへの参照を渡す。
Object.create(null)で生成したオブジェクトを返すのでhashオブジェクトである。
var XHRConnection = function(args){ var _private = { //private property "url":"null", "params":{}, "callback":{} }; var __constractor = function(args){ //constractor var _this = Object.create(null); //hash XHRConnection.prptotype.call(_this,_private); //_privateを渡してprototypeをcall for(var key in args){ if(args.hasOwnProperty(key) && _private[key]){ _private[key] = args[key]; //引数を privateにセット } } return _this; }; if(!(this instanceof XHRConnection)){ //new強制 return new XHRConnection(args); }else{ return __constractor(args); //コンストラクタ呼び出し } }; XHRConnection.prptotype = function(){ //prototype:クロージャ関数 var _counter = 0; //prvate static var _request = new XMLHttpRequest(); return function(args){ //public statc _counter++; //private staticを更新 var _p = args; //prototype property set this.getCounter = function(){ //public static method return _counter; }; this.doGet = function(){ _request.onreadystatechange = function(){ if(_request.readyState == 4 && _request.status== 200){ _p.callback(_request.responseText); //callback _request.abort(); } }; _request.open("GET",_p.url,true); _request.send(null); }; }; }(); function init(){ var callback = function(response){ //alert(response); var _target = document.getElementById('target'); _target.innerHTML= response; }; var args = { "url":"test.txt", "params":{}, "callback":callback }; console.log(args); var xhr = new XHRConnection(args); xhr.doGet(); }