在JS代碼中寫入function fn(){}或者var fn=function(){}等等,你都可以將其理解為對象,當然還有數組等等。
在理解物件導向之前,先瞭解下面幾個東西吧。
1.對象方法的調用
在js最外層寫的function可以還可以理解為window對象的一個方法。定義的變數也可以稱之為window對象的一個屬性。例如:
[javascript] view plaincopy
- var test=function(){
- alert("123")
- }
- 當然上面的你也可以這樣定義
- function test(){
- alert("123")
- }
- 作為window對象的方法我們可以這樣調用
- test()//彈出警告框123(因為window對象是頂級對象我們可以將其省略)
- window.test()//彈出警告框123
- window['test']()//彈出警告框123,可以將test理解為window數組對象下面的一個方法值。
通過以上的例子大致瞭解了對象的方法怎使用和調用。
2,私人方法
私人方法就是只有在對象內部範圍內部才能使用的方法。可以用變數範圍的方式來理解這個東西。
上面例子的function都可以理解為window對象的私人方法。繼續看下面的例子。
[javascript] view plaincopy
- var pet=function(){
- function showpet(){
- alert("123")
- }
- showpet();//私人方法可以在函數範圍範圍內使用。
- var temp="私人變數只有在函數或者對象範圍範圍內能訪問"
- }
- showpet();//會出錯
- pet.showpet()//還是不能這樣調用
-
- var Penguin=new pet() //執行個體化一個pet對象
- Penguin.showpet()//不好意思這樣子還是不能讓你調用。
- var pet=function(){
- function showpet(){
- alert("123")
- }
- showpet();//私人方法可以在函數範圍範圍內使用。
- var temp="私人變數只有在函數或者對象範圍範圍內能訪問"
- }
- showpet();//會出錯
- pet.showpet()//還是不能這樣調用
-
- var Penguin=new pet() //執行個體化一個pet對象
- Penguin.showpet()//不好意思這樣子還是不能讓你調用。
如果我想定義的方法可以對象的範圍外面調用該怎麼辦呢?我該怎麼使用私人方法呢?我們來看下一點內容吧。
3.靜態方法
帶著上面的問題我們繼續上面的例子。
[javascript] view plaincopy
- var pet=function(){
- function showpet(){//私人方法
- alert("123")
- }
- showpet();//私人方法可以在函數範圍範圍內使用。
- }
- pet.show=function(){//給pet對象添加一個靜態方法。
- alert("456")
- }
- pet.name="Penguin"//給pet對象添加一個靜態屬性。
-
- pet.show()//彈出警告框456
- alert(pet.name)//彈出警告框Penguin
-
- //繼續思維碰撞
- =====================
- var Penguin=new pet() //執行個體化一個pet對象
- Penguin.show()//不好意思,這個靜態方法好像沒有被執行個體繼承。有這種思路值得表揚啊,加油!
上面的執行個體向你展示了什麼叫靜態方法,當然你可能會不明白,其實我也不懂,因為我也是菜鳥,但是只要你看了以後知道怎樣為對象寫一個靜態方法,怎麼調用該靜態方法就可以了,也許某一天,你突然明白了就會回來教我了。帶著上面的問題我們來看看執行個體化的對象能調用的方法。
4.公有方法
公有方法通常是通過修改建構函式的原型來實現的,修改一個對象的原型以後,所有該對象執行個體都會繼承原型的修改(這句話極為裝B,如果你感覺模糊就請忽略)。
修改對象原型的方法,繼續上面的例子。
pet.prototype.setname=function(str){//通過修改原型添加一個公有方法,用於添加修改執行個體對象的name
name=str;
}
看例子:
[javascript] view plaincopy
- var pet=function(){
- function showname(){//私人方法
- alert(this.name)
- }
- this.show=function(){ //如果這裡不理解,請注意這個方法下面就要介紹了。
- showname();
- }
- }
- pet.prototype.setname=function(str){
- name=str;
- }
- var Penguin=new pet()
- Penguin.setname("Penguin");//添加執行個體的name值為Penguin
- Penguin.show(); //彈出Penguin
- Penguin.setname("wind");//添加執行個體的name值為wind
- Penguin.show(); //彈出wind
-
-
運行代碼玩玩。
[javascript] view plaincopy
- <mce:script type="text/javascript"><!--
- var pet=function(){
- name:"123",
- function showname(){//私人方法
- alert(this.name)
- }
- this.show=function(){
- showname();
- }
- }
- pet.prototype.setname=function(str){
- name=str;
- }
- var Penguin=new pet()
- Penguin.setname("Penguin");
- Penguin.show();
- Penguin.setname("wind");
- Penguin.show();
- // --></mce:script>
5.特權方法(對象或者函數對外的介面)
其實在上面的例子中我們已經用到了這種方法。這種方法可以被執行個體化的對象繼承所調用。通過在建構函式內部通過thsi關鍵字定義的的方法。特權方法能夠在建構函式外面公開訪問(僅限於執行個體化的對象),而且還能夠訪問私人成員和方法,因此用來做為對象或者建構函式的介面最合適不過了,通過特權函數我們可以控制公有方法對私人方法的訪問,這個在JS架構的擴充中有很多應用。
各位看官可以當上面的是一段P話,我們具體來看看怎麼樣定義一個特權方法,怎樣引用一個特權方法,繼續調用上面得執行個體來看。
[c-sharp] view plaincopy
- var pet=function(){
- function showname(){//私人方法
- alert(this.name)
- }
- this.show=function(){//通過使用this關鍵字定義一個特權方法。
- showname(); //在特權方法中訪問私人方法;
- }
- }
- pet.prototype.setname=function(str){
- name=str;
- }
- var Penguin=new pet();//執行個體化一個pet對象
- Penguin.setname("Penguin");//調用公有方法修改
- Penguin.show(); //調用特權方法訪問私人方法,彈出name
首先通過在建構函式中用this.fn=function(){}建立一個特權方法。在特權函數中訪問私人方法;
執行個體化的對象可以通過存取權限函數來使用部分私人方法,存取權限函數的方法同訪問公有函數。