用JAVASCRIPT實現靜態對象、靜態方法和靜態屬性,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"]);//1p["show"]();//My name is x</span>
在Jquery中可以這樣使用對象的靜態方法和屬性:
var arr=new Array();arr["push"]("x");alert(arr["length"]);//1歡迎大家補充討論,共同進步!
(javascript)靜態範圍並非靜態,怎理解?
alternate()方法是sayHi()的一個子方法,其實這樣說也不對,應該是屬性才對。
javascript)靜態範圍並非靜態,如何理解啊?
想想:
雖然很多書上說javascript沒有以象之說,其實歸根到底,javascript還是少不了對象的存在,比如說window對象等等,它都是封裝了某一領域的範圍,
比如說window.open(),如果你單獨掉用open()方法而前面沒有加上window,那麼就可以理解成靜態範圍並非靜態,也就是說你沒有加上是哪個對象的引用,比如說數組,我們每定一個數組,如果要訪問它的數組的某個元素,就得加上數組的下標才能訪問得到。
你上面的程式我來幫你更改一下,或許你就會明白其中的道理了
function sayHi()
{
alert("hi");
var alternate=alternte
//如果alternte加上()那麼就等於這個局部變數接受下面這個函數所返回的值。
//如果alternte沒有加上(),那麼就等於這個局量用來執行下面所定義的函數。
function alternate()
{
return alert("hola");
//alert("hola");
};
}
上面這個代碼,相當於我把某個功能封裝起來了,如果你要調用,那就得建立對象。
var sa=new sayHi();
這時就可以使用sa就是個對象,你就可以使用sa這引用變數來調用你裡所定義的一些屬性和方法。如下所示:
sa.alternate
通過這個sa的引用調用alternate的屬性,就可以調用alternate()
你也可以使用sa對象來直接調用alternate()
如:sa.alternate()
說完了,也說得亂七八糟,不知能否讓你理解。
JavaScript 裡 靜態方法 可以用 對象方法() ?
該方法是 Date 對象的靜態方法。一般採用 Date.parse() 的形式來調用,而不是通過 dateobject.parse() 調用該方法。