Javascript語(yǔ)言的面向?qū)ο筇卣骱苋?,其他面向?qū)ο笳Z(yǔ)言在創(chuàng)建類時(shí)只要使用關(guān)鍵字static即可指定類為靜態(tài)類,Javascript沒(méi)有提供static這樣的關(guān)鍵字,要讓Javascript也具有“靜態(tài)”特性只有靠一些“奇技淫巧”了。
代碼中列舉了兩種靜態(tài)方法/屬性的實(shí)現(xiàn)方式,一種是靜態(tài)類的靜態(tài)方法和屬性,另一種是非靜態(tài)類的靜態(tài)方法和屬性,代碼說(shuō)明都寫在每行的代碼注釋里,這里就不重復(fù)了。
JAVASCRIPT:/****************************************
* 方法一
* 類、方法、屬性都為靜態(tài)類型
* 不能創(chuàng)建實(shí)例
*****************************************/
var Time = {
today: ‘2009-3-8′,
weather: ‘rain’,
show: function() {
alert(‘Today is ‘ + this.today);
}
};
//靜態(tài)對(duì)象可直接使用,無(wú)需創(chuàng)建實(shí)例
alert(‘It is ‘ + Time.weather + ‘ today.’);
Time.show();
//下面的代碼會(huì)出錯(cuò),因?yàn)殪o態(tài)類不能創(chuàng)建實(shí)例
//var t = new Time();
//t.show();
/****************************************
* 方法二
* 普通對(duì)象,同時(shí)擁有靜態(tài)和非靜態(tài)屬性、方法
* 可以用實(shí)例化
* 注意:
* 1.靜態(tài)方法/屬性使用類名訪問(wèn)
* 2.非靜態(tài)方法/屬性使用實(shí)例名訪問(wèn)
*****************************************/
function Person(name) {
//非靜態(tài)屬性
this.name = name;
//非靜態(tài)方法
this.show = function() {
alert(‘My name is ‘ + this.name + ‘.’);
}
}
//添加靜態(tài)屬性,人都是一張嘴
Person.mouth = 1;
//添加靜態(tài)方法,哇哇大哭
Person.cry = function() {
alert(‘Wa wa wa …’);
};
//使用prototype關(guān)鍵字添加非靜態(tài)屬性,每個(gè)人的牙可能不一樣多
Person.prototype.teeth = 32;
//非靜態(tài)方法必須通過(guò)類的實(shí)例來(lái)訪問(wèn)
var me = new Person(‘Zhangsan’);
//使用非靜態(tài)方法、屬性
me.show();
alert(‘I have ‘ + me.teeth + ‘ teeth.’);
//使用靜態(tài)方法、屬性
Person.cry();
alert(‘I have ‘ + Person.mouth + ‘ mouth.’);