用JAVASCRIPT實現靜態對象、靜態方法和靜態屬性

Javascript語言的面向對象特徵很弱,其他面嚮對象語言在創建類時只要使用關鍵字static即可指定類爲靜態類,Javascript沒有提供static這樣的關鍵字,要讓Javascript也具有“靜態”特性只有靠一些“奇技淫巧”了。

代碼中列舉了兩種靜態方法/屬性的實現方式,一種是靜態類的靜態方法和屬性,另一種是非靜態類的靜態方法和屬性,代碼說明都寫在每行的代碼註釋裏,這裏就不重複了。

/****************************************
* 方法一
* 類、方法、屬性都爲靜態類型
* 不能創建實例
*****************************************/
var Time = {
    today: ‘2009-3-8′, 
    weather: ‘rain’, 
    show: function() {
alert(‘Today is ‘ + this.today); 
}
}; 
 
//靜態對象可直接使用,無需創建實例
alert(‘It is ‘ + Time.weather + ‘ today.’); 
Time.show(); 
 
//下面的代碼會出錯,因爲靜態類不能創建實例
//var t = new Time();
//t.show();
 
/****************************************
* 方法二
* 普通對象,同時擁有靜態和非靜態屬性、方法
* 可以用實例化
* 注意:
*   1.靜態方法/屬性使用類名訪問
*   2.非靜態方法/屬性使用實例名訪問
*****************************************/
function Person(name) {
//非靜態屬性
this.name = name; 
//非靜態方法
this.show = function() {
alert(‘My name is ‘ + this.name + ‘.’); 
}
}
//添加靜態屬性,人都是一張嘴
Person.mouth = 1; 
//添加靜態方法,哇哇大哭
Person.cry = function() {
alert(‘Wa wa wa …’); 
}; 
//使用prototype關鍵字添加非靜態屬性,每個人的牙可能不一樣多
Person.prototype.teeth = 32; 
 
//非靜態方法必須通過類的實例來訪問
var me = new Person(‘Zhangsan’); 
//使用非靜態方法、屬性
me.show(); 
alert(‘I have ‘ + me.teeth + ‘ teeth.’); 
//使用靜態方法、屬性
Person.cry(); 
alert(‘I have ‘ + Person.mouth + ‘ mouth.’);
//
var p=new Person("x");
	alert(p.mouth);//回顯示未定義
	p.cry();//會顯示Uncaught TypeError: Object #<Person> has no method 'cry'
可以發現,實例對象沒法訪問類的靜態方法和屬性。需要訪問只能使用類名

<span style="color:#333333;">function Person(name){
		this.name=name;
		this.show=function(){
			alert("My Name is "+this.name);
		};
	};
	
	Person.mouth=1;
	Person.cry=function(){
		alert("wa wa");
	}
	Person.prototype.teeth=32;
	
	
	var p=new Person("x");
	alert(Person["mouth"]);//1
	p["show"]();//My name is x</span>



在Jquery中可以這樣使用對象的靜態方法和屬性:
 
var arr=new Array();
	arr["push"]("x");
	alert(arr["length"]);//1
歡迎大家補充討論,共同進步!




發佈了74 篇原創文章 · 獲贊 5 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章