JavaScript物件導向-靜態方法-私人方法-公有方法-特權方法

來源:互聯網
上載者:User
在JS代碼中寫入function fn(){}或者var fn=function(){}等等,你都可以將其理解為對象,當然還有數組等等。

在理解物件導向之前,先瞭解下面幾個東西吧。
1.對象方法的調用
在js最外層寫的function可以還可以理解為window對象的一個方法。定義的變數也可以稱之為window對象的一個屬性。例如:


[javascript] view plaincopy

  1. var test=function(){  
  2. alert("123")  
  3. }  
  4. 當然上面的你也可以這樣定義  
  5. function test(){  
  6. alert("123")  
  7. }  
  8. 作為window對象的方法我們可以這樣調用  
  9. test()//彈出警告框123(因為window對象是頂級對象我們可以將其省略)  
  10. window.test()//彈出警告框123  
  11. window['test']()//彈出警告框123,可以將test理解為window數組對象下面的一個方法值。  

通過以上的例子大致瞭解了對象的方法怎使用和調用。
2,私人方法
私人方法就是只有在對象內部範圍內部才能使用的方法。可以用變數範圍的方式來理解這個東西。
上面例子的function都可以理解為window對象的私人方法。繼續看下面的例子。

[javascript] view plaincopy

  1. var pet=function(){  
  2.     function showpet(){  
  3.     alert("123")  
  4.       }  
  5.     showpet();//私人方法可以在函數範圍範圍內使用。  
  6.    var temp="私人變數只有在函數或者對象範圍範圍內能訪問"  
  7. }  
  8. showpet();//會出錯  
  9. pet.showpet()//還是不能這樣調用  
  10.   
  11. var Penguin=new pet() //執行個體化一個pet對象  
  12. Penguin.showpet()//不好意思這樣子還是不能讓你調用。  
  13. var pet=function(){  
  14.     function showpet(){  
  15.     alert("123")  
  16.       }  
  17.     showpet();//私人方法可以在函數範圍範圍內使用。  
  18.    var temp="私人變數只有在函數或者對象範圍範圍內能訪問"  
  19. }  
  20. showpet();//會出錯  
  21. pet.showpet()//還是不能這樣調用  
  22.   
  23. var Penguin=new pet() //執行個體化一個pet對象  
  24. Penguin.showpet()//不好意思這樣子還是不能讓你調用。  

如果我想定義的方法可以對象的範圍外面調用該怎麼辦呢?我該怎麼使用私人方法呢?我們來看下一點內容吧。
3.靜態方法
帶著上面的問題我們繼續上面的例子。


[javascript] view plaincopy

  1. var pet=function(){  
  2.     function showpet(){//私人方法  
  3.     alert("123")  
  4.       }  
  5.     showpet();//私人方法可以在函數範圍範圍內使用。  
  6. }  
  7. pet.show=function(){//給pet對象添加一個靜態方法。  
  8. alert("456")  
  9. }  
  10. pet.name="Penguin"//給pet對象添加一個靜態屬性。  
  11.   
  12. pet.show()//彈出警告框456  
  13. alert(pet.name)//彈出警告框Penguin  
  14.   
  15. //繼續思維碰撞  
  16. =====================  
  17. var Penguin=new pet() //執行個體化一個pet對象  
  18. Penguin.show()//不好意思,這個靜態方法好像沒有被執行個體繼承。有這種思路值得表揚啊,加油!  

上面的執行個體向你展示了什麼叫靜態方法,當然你可能會不明白,其實我也不懂,因為我也是菜鳥,但是只要你看了以後知道怎樣為對象寫一個靜態方法,怎麼調用該靜態方法就可以了,也許某一天,你突然明白了就會回來教我了。帶著上面的問題我們來看看執行個體化的對象能調用的方法。
4.公有方法
公有方法通常是通過修改建構函式的原型來實現的,修改一個對象的原型以後,所有該對象執行個體都會繼承原型的修改(這句話極為裝B,如果你感覺模糊就請忽略)。
修改對象原型的方法,繼續上面的例子。

pet.prototype.setname=function(str){//通過修改原型添加一個公有方法,用於添加修改執行個體對象的name
name=str;
}

看例子:

[javascript] view plaincopy

  1. var pet=function(){  
  2.     function showname(){//私人方法  
  3.     alert(this.name)  
  4.       }  
  5.   this.show=function(){ //如果這裡不理解,請注意這個方法下面就要介紹了。  
  6.    showname();  
  7.   }  
  8. }  
  9. pet.prototype.setname=function(str){  
  10. name=str;  
  11. }  
  12. var Penguin=new pet()  
  13.   Penguin.setname("Penguin");//添加執行個體的name值為Penguin  
  14.   Penguin.show();                  //彈出Penguin  
  15.   Penguin.setname("wind");//添加執行個體的name值為wind  
  16.   Penguin.show();                 //彈出wind  
  17.   
  18.    

運行代碼玩玩。

[javascript] view plaincopy

  1. <mce:script type="text/javascript"><!--  
  2. var pet=function(){  
  3.     name:"123",  
  4.     function showname(){//私人方法  
  5.     alert(this.name)  
  6.       }  
  7.   this.show=function(){  
  8.    showname();  
  9.   }  
  10.  }  
  11. pet.prototype.setname=function(str){  
  12.  name=str;  
  13. }  
  14.  var Penguin=new pet()  
  15.   Penguin.setname("Penguin");  
  16. Penguin.show();  
  17. Penguin.setname("wind");  
  18. Penguin.show();  
  19. // --></mce:script>  

5.特權方法(對象或者函數對外的介面)
其實在上面的例子中我們已經用到了這種方法。這種方法可以被執行個體化的對象繼承所調用。通過在建構函式內部通過thsi關鍵字定義的的方法。特權方法能夠在建構函式外面公開訪問(僅限於執行個體化的對象),而且還能夠訪問私人成員和方法,因此用來做為對象或者建構函式的介面最合適不過了,通過特權函數我們可以控制公有方法對私人方法的訪問,這個在JS架構的擴充中有很多應用。

各位看官可以當上面的是一段P話,我們具體來看看怎麼樣定義一個特權方法,怎樣引用一個特權方法,繼續調用上面得執行個體來看。


[c-sharp] view plaincopy

  1. var pet=function(){  
  2.     function showname(){//私人方法  
  3.     alert(this.name)  
  4.       }  
  5.   this.show=function(){//通過使用this關鍵字定義一個特權方法。  
  6.    showname();           //在特權方法中訪問私人方法;  
  7.   }  
  8. }  
  9. pet.prototype.setname=function(str){  
  10. name=str;  
  11. }  
  12. var Penguin=new pet();//執行個體化一個pet對象  
  13.   Penguin.setname("Penguin");//調用公有方法修改  
  14.   Penguin.show();                  //調用特權方法訪問私人方法,彈出name  

首先通過在建構函式中用this.fn=function(){}建立一個特權方法。在特權函數中訪問私人方法;
執行個體化的對象可以通過存取權限函數來使用部分私人方法,存取權限函數的方法同訪問公有函數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.