物件的屬性與方法(公開與私有)
- 詳細內容
- 分類:Javascript
- 發佈:2013-07-17, 週三 00:02
- 點擊數:2236
物件的屬性與方法,公開與私有:
物件的屬性與方法有公開與私有之分,公開的屬性與方法可藉由物件直接存取,私有的會隱藏在物件內,不被外部程式碼所見,也不能直接被存取。與一般物件導向語言不同的是,Javascript並無法直接宣告變數為公開或私有。但是我們可以藉由其他方式來達到目的。
下面兩個例子中的兩個屬性itemname、type與兩個方法getName、getType都是公開的,可以在物件後面加 " . " 然後加名稱來存取,譬如說myitem.itemname,myitem.getType()等等。
建構函式建立的物件的公開屬性與方法:在建構函式中,凡是用this開頭的屬性與方法都是公開的,可以直接被存取。
<script type="text/javascript"> function item(name,type){ this.itemname=name.toString(); this.type=type.toString(); this.getName=function(){ return this.itemname; } this.getType=function(){ return this.type; } } var myitem=new item("體力回復劑", "藥水"); alert("物品:"+myitem.itemname+" 種類:"+myitem.getType()); //輸出==>物品:體力回復劑 種類:藥水 </script>
使用實字建立的物件的公開屬性與方法:所有屬性與方法都是公開的。
<script type="text/javascript"> var myitem={ itemname:"體力回復劑", type:"藥水", getName:function(){ return this.itemname;}, getType:function(){ return this.type;} } alert("物品:"+myitem.itemname+" 種類:"+myitem.getType()); //輸出==>物品:體力回復劑 種類:藥水 </script>
下面兩個例子的屬性是私有的,方法是公開的:
建構函式建立的物件的私有屬性與方法:利用閉包來模擬私有屬性與方法。
<script type="text/javascript"> function item(name,type){ var itemname=name.toString(); //私有屬性 var type=type.toString(); //私有屬性 this.getName=function(){ //產生閉包 return itemname; //傳回私有屬性,變數前不加上this } this.getType=function(){ //產生閉包 return type; //傳回私有屬性,變數前不加上this } } var myitem=new item("體力回復劑", "藥水"); alert("物品:"+myitem.getName()+" 種類:"+myitem.getType()); //輸出==>物品:體力回復劑 種類:藥水 </script>
使用實字的物件的私有屬性與方法:使用立即函式與閉包來模擬私有屬性與方法:
<script type="text/javascript"> var myitem=(function(){ var itemname="體力回復劑"; //私有屬性 var type="藥水" //私有屬性 return { //傳回物件,產生閉包 getName:function(){ return itemname;}, getType:function(){ return type;} } })(); alert("物品:"+myitem.getName()+" 種類:"+myitem.getType()); //輸出==>物品:體力回復劑 種類:藥水 </script>
上面兩個例子的屬性 itemname,type已經變成了私有屬性,不能藉由myitem.itemname或是myitem.type來直接存取了,而是必須藉由公開的方法,getName()以及getType()來取得。
有一點要注意的是,雖然私有變數可以隱藏在物件當中,不被直接存取。不過若是私有變數本身是個物件,這時候一旦該變數藉由公開方法傳遞給外部變數時,該私有變數是可以被外部程式給改變的。這原因是因為Javascript在傳遞物件時會以傳址的方式進行,這種情況下會導致外部程式碼可以修改物件內部私有屬性的情況,得小心避免。
按個讚!~支持本站!~
FB推薦載入中