轉自:http://blog.tugai.net/2009/03/07/javascript-static-class-mothed-property/。
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();
-
-
-
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.’);
2 評論
-
uosma 發佈於 九月 22nd, 2009
關於靜態方法你對js的理解本身就是錯誤的,更讓我驚訝的是到處都是這樣錯誤的寫法
-
hanyuxinting 發佈於 十二月 7th, 2011