JavaScriptは装飾シミュレーションを利用して私有状態を実現する.

3122 ワード

古典的なオブジェクト指向プログラミングでは、オブジェクトのある状態をパッケージ化したり、オブジェクト内に隠したりする必要がありますが、オブジェクトの一枚の幅とこれらの状態にアクセスすることができます.
私たちは、変数(またはパラメータ)を構造関数内に飾ることによって、プライベートインスタンスフィールドをシミュレーションして実現でき、構造関数を呼び出してインスタンスを作成します.
function Range(from,to){

    ////              

    //          

    this.from=function(){return from;}

    this.to=function(){return to;}

}



Range.prototype={

    constructor:Range,

    includes:function(x){return this.from() <=x && x<=this.to();},

    foreach:function(f){

        for(var x=Math.ceil(this.from()),max=this.to();x<=max;x++;)

            f(x);

    },

    toString:function(){

        return "(" +this.from() +"..." +this.to() +")"; 

    }

}

//  :

var r=new Range(0,5);       //         

r.from=function(){    return 0; }  //          
 
このようなパッケージ技術はより多くのシステムオーバーヘッドをもたらすことに留意されたい.クローズドを使用してクラスを閉鎖した状態のクラスは、パッケージを使用しない状態変数の等価クラスの動作速度よりも遅く、より多くのメモリを占有するに違いない.
Javascript権威の手引きから来ました.9.6.6