javascript面向物件程式設計--靜態方法
在面向物件程式設計中,類是不能夠直接訪問的,必須例項化後才可以訪問,大多數方法和屬性與類的例項產生聯絡。但是靜態屬性和方法與類本身直接聯絡,可以從類訪問,如javascript的核心物件中的Math和Global都是靜態物件,不需例項化,可以直接訪問
類的靜態成員(屬性和方法)包括私有和共有兩種型別
var F=(function(){
var _a=1; //閉包體的私有變數
this.a=_a; //公共屬性
this.get1=function(){return _a;};//公共方法
this.set1=function(x){_a=x;};
function set5(x){_a=x}; //私有方法
function get5(){ return _a}; //私有方法
return function(){ //返回的建構函式類
this.get2=function(){ return _a}; // 返回的公共方法可以 訪問私有變數
this.set2=function(x){_a=x;}; //返回的公共方法可以 訪問私有變數 ;
}
})();
//定義類的靜態公共方法和屬性
F.get3=function(){ return get1();}
F.set3=function(x){set1(x);}
F.a=a;
訪問靜態成員
alert(F.get3());//1 alert(F.a);//1 F.set3(2) alert(F.get3());//2
注意例項化F時,所呼叫的是內層函式,是無法訪問外層函式的公共方法和屬性的
var a=new F();
alert(a.get2());//1
a.set2(2);
alert(a.get2());//2
但以下是錯誤的:閉包體內的變數屬性方法不管私有還是公有,級別比較低的F類都是無法訪問的
alert(a.get1()); a.set1(2); alert(a.get2())-----無權訪問的
但是對與閉包體內的所有物件都可以訪問閉包體內的私有公有的變數屬性 方法,也可以訪問類F(根據作用域鏈向上訪問閉包所有成員)
F.prototype={
get4:function(){ return get1();},
set4:function(x){set1(x)};
};
var a=new F(); //例項化類F
alert(a.get4()); //1
同理利用閉包體也可以實現對資料的封裝,而且這種封裝是非常有效牢靠的