javascript中的對象屬性都是公開的,外界均可訪問到,例:javascript
1 function cat(){ 2 this.name = '貓'; 3 this.climb = function(){ 4 alert('我會爬樹!'); 5 } 6 } 7 var boshi = new cat(); 8 alert(boshi.name); 9 boshi.climb();
cat對象中被實例化,name屬性和climb方法都能被直接調用,沒有被私有,可是咱們能夠用閉包模擬封裝java
1 function cat(){ 2 var age = 28; 3 this.name = '貓'; 4 this.climb = function(){ 5 alert('我會爬樹!'); 6 } 7 this.tellage = function(addage){ 8 return '我通常告訴別人年齡是'+(age+addage); 9 } 10 } 11 var boshi = new cat(); 12 alert(boshi.name); 13 alert(boshi.age); //因爲age是局部變量,因此訪問不了 14 alert(boshi.tellage(-10)); //tellage方法是個模擬開放接口,開放年齡
這裏的age就可模擬成一個私有屬性,運用閉包(指在一個函數內定義的局部變量,被此函數內定義子函數所調用,也就是子函數訪問上級函數定義的變量)可模擬封裝,固然封裝私有方法也能夠的。閉包