<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    沙漠中的魚

    欲上天堂,先下地獄
    posts - 0, comments - 56, trackbacks - 0, articles - 119
      BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

            鐵桿的面向?qū)ο笤O(shè)計(jì)支持者會(huì)注意到,當(dāng)使用prototype方法向JavaScript對象增加屬性和函數(shù)時(shí),所增加的屬性和函數(shù)都是公用的,所有其他對象都能訪問。對于函數(shù)來說,這通常沒有問題,因?yàn)榇蠖鄶?shù)函數(shù)都確實(shí)應(yīng)當(dāng)提供給外部客戶。但是對于屬性,面向?qū)ο笤O(shè)計(jì)的支持者就會(huì)指出,公有屬性違反了信息隱藏的概念,對象的屬性應(yīng)當(dāng)是私有的,因此外部客戶不能直接訪問。外部客戶只能通過公用可用的函數(shù)來訪問對象的私有屬性。

    對于JavaScript,同樣有可能創(chuàng)建外部客戶不能訪問的私有屬性,而只能通過對象的(公用)方法來訪問,但這一點(diǎn)很少有人知道。Douglas Crockford[3]提出了一種在JavaScript中創(chuàng)建私有屬性的方法。這種方法非常簡單,總結(jié)如下:

    l    私有屬性可以在構(gòu)造函數(shù)中使用var關(guān)鍵字定義。

    l    私有屬性只能由特權(quán)函數(shù)(privileged function)公用訪問。特權(quán)函數(shù)就是在構(gòu)造函數(shù)中使用this關(guān)鍵字定義的函數(shù)。外部客戶可以訪問特權(quán)函數(shù),而且特權(quán)函數(shù)可以訪問對象的私有屬性。

    下面來考慮前一個(gè)示例中的Vehicle類。假設(shè)你想讓wheelCount和curbWeightIn- Pounds屬性是私有的,并只能通過公用方法訪問。新的Vehicle對象如代碼清單5-4所示。

    代碼清單5-4  重寫后的Vehicle對象

    function Vehicle() {

        
    var wheelCount = 4;

        
    var curbWeightInPounds = 4000;

        
    this.getWheelCount = function() {
            
    return wheelCount;
        }


        
    this.setWheelCount = function(count) {
            wheelCount 
    = count;
        }


        
    this.getCurbWeightInPounds = function() {
            
    return curbWeightInPounds;
        }


        
    this.setCurbWeightInPounds = function(weight) {
            curbWeightInPounds 
    = weight;
        }


        
    this.refuel = function() {
            
    return "Refueling Vehicle with regular 87 octane gasoline";
        }


        
    this.mainTasks = function() {
            
    return "Driving to work, school, and the grocery store";
        }

    }

     

    注意,wheelCount和curbWeightInPounds屬性都在構(gòu)造函數(shù)中使用var關(guān)鍵字定義,這就使得這兩個(gè)屬性是私有屬性。屬性不再是公用的,如果想通過點(diǎn)記法訪問wheelCount屬性的值,如下:

    var numberOfWheels = vehicle.wheelCount;

    就會(huì)返回undefined,而不是wheelCount實(shí)際的值。

    由于屬性現(xiàn)在是私有的,因此需要提供能訪問這些屬性的公用函數(shù)。getWheelCount、setWheelCount、getCurbWeightInPounds和setCurbWeightInPounds函數(shù)就是作此使用的。現(xiàn)在Vehicle對象可以保證只能通過公用函數(shù)訪問私有屬性,因此滿足了信息隱藏的


     

    引用:http://book.csdn.net/bookfiles/11/100117056.shtml

    主站蜘蛛池模板: 亚洲一级毛片中文字幕| 一级做α爱过程免费视频| 免费看AV毛片一区二区三区| 色九月亚洲综合网| 国产V亚洲V天堂无码| 毛片免费全部免费观看| 春意影院午夜爽爽爽免费| 亚洲狠狠狠一区二区三区| 免费在线一级毛片| 99re6热视频精品免费观看 | 亚洲男女一区二区三区| 日韩a级毛片免费视频| 手机看片国产免费永久| 亚洲欧美日韩国产精品一区| 亚洲av午夜福利精品一区| 免费观看黄网站在线播放| 免费无码H肉动漫在线观看麻豆| 亚洲18在线天美| 亚洲成AV人片一区二区| 国产精品嫩草影院免费| 久久国产乱子伦免费精品| 永久免费无码网站在线观看个| 亚洲国产精品成人综合色在线婷婷 | 亚洲综合色婷婷七月丁香| 午夜时刻免费入口| 91高清免费国产自产拍2021| 又大又硬又粗又黄的视频免费看| 亚洲免费中文字幕| 国产成人A人亚洲精品无码| 亚洲国产免费综合| 四虎影视免费在线| 69av免费视频| 毛片无码免费无码播放| jizz免费观看视频| 国产精品久久久久久亚洲小说| 亚洲精品成人网站在线播放| 亚洲AV综合色区无码一区| 亚洲AV无码专区日韩| 永久免费看mv网站入口| 亚洲三级高清免费| 亚洲免费一级视频|