## 一、創建靜態成員
? ? ?直接將屬性或者方法賦給類本身
~~~
function Person(name,age)
{
this.myname = name;
this.age = age;
}
Person.showInfo = function() //靜態方法,只能訪問靜態屬性
{
return ("我的性別是:"+Person.sex);
};
var per = new Person("yuan",20);
Person.sex = "男"; //靜態屬性
alert(Person.showInfo());
~~~
Google中運行結果:

也可以改為this.sex訪問,結果相同。但是不可以用this.myname/this,age訪問實例屬性。
## 二 、注意事項
? 2.1 ? 靜態成員一般是公共成員,不能被繼承,但可以在子類中直接使用
? 2.2 ? JS中允許定義同名的靜態屬性和實例屬性,二者互相獨立
~~~
function Person(name,age,sex)
{
this.myname = name;
this.age = age;
this.sex = sex;
}
Person.showInfo = function() //靜態方法,只能訪問靜態屬性
{
return ("我的性別是:"+Person.sex);
};
var per = new Person("yuan",20,"女");
Person.sex = "男"; //靜態屬性
alert(Person.showInfo());
~~~
運行結果:

? 2.3 ? ?靜態方法中不能訪問實例屬性,且不能使用關鍵字super,但是實例方法可以訪問靜態屬性和實例屬性
~~~
function Person(name,age,sex)
{
this.myname = name;
this.age = age;
this.sex = sex;
}
Person.prototype.showInfo = function() //實例方法
{
return ("我的性別是:"+Person.sex+"\n我的年齡是:"+this.age);
};
var per = new Person("yuan",20,"女");
Person.sex = "男"; //靜態屬性
alert(per.showInfo());
~~~
運行結果:

? 2.4 ? ?如果一個類的成員全是靜態成員,則這個類是靜態類,不能被實例化。
## 三 、枚舉:一組靜態常量
~~~
function Day()
{
throw new Error("這是靜態類,不能實例化");
}
Day.MONDAY = 1;
Day.TUE = 2;
Day.WED = 3;
var date = new Date();
var day = date.getDay();
switch(day)
{
case Day.MONDAY:
alert("周一");
break;
case Day.TUE:
alert("周二");
break;
case Day.WED:
alert("周三");
break;
}
~~~
## 四、重載和覆蓋
? 4.1 ? 重載:在JS中,不允許有兩個同名的方法,且參數沒有數據類型,所以JS中的重載是通過參數的個數不同實現的
~~~
function OverLoad()
{
this.method = function()
{
var len = arguments.length;
if(len == 2)
{
document.write("正在調用的是兩個參數的方法<br/>");
}
else if(len == 3)
{
document.write("正在調用的是三個參數的方法");
}
}
}
try
{
var over = new OverLoad;
over.method(1,2);
over.method(1,2,3);
}
catch(err)
{
document.write(err);
}
~~~
運行結果

? 4.2 ? 覆蓋:用于繼承中,指子類中定義了與父類中同名的方法,父類的同名方法被隱藏
~~~
//父類
function Father(myName,age)
{
this.myname = myName;
this.age = age;
}
Father.prototype.show = function()
{
return("Father's name: "+this.myName+", and age: "+this.age);
};
//子類
function Child(myName,age)
{
this.$super = Father; //繼承父類
this.$super(myName,age); //調用父類的構造方法
this.show = function()
{
return ( "Child's age: "+this.age);
};
}
Child.prototype = new Father();
var child = new Child("yuan",20);
alert(child.show());
~~~
運行結果:

- 前言
- 一
- 二:變量
- 三:數據運算
- 四:流程控制
- 五:內建的全局函數
- 六:自定義函數
- 七:面向對象編程(OOP)
- 八:靜態成員、靜態類、枚舉、重載和覆蓋
- 九:原型鏈本質論
- 十:ECMAScript 5 增強的對象模型
- 十一:處理字符串---String類和正則表達式
- 十二:數組、多維數組和符合數組(哈希映射)
- 十三:處理日期和時間
- 十四:JavaScript內建類
- 十五:BOM之源---window對象
- 十六:BOM之源---BOM基本應用
- 十七:BOM新成就(1)--客戶端存儲數據(Storage實現)
- 十八:BOM新成就(1)--客戶端存儲數據(Web SQL DataBase實現)
- 十九--HTML5 DOM新標準---處理文檔元信息和管理交互能力
- 二十---XMLHttpRequest和AJAX解決方案