- 技术--- 闭包
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方法都能被直接调用,没有被私有,但是我们可以用闭包模拟封装
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就可模拟成一个私有属性,运用闭包(指在一个函数内定义的局部变量,被此函数内定义子函数所调用,也就是子函数访问上级函数定义的变量)可模拟封装,当然封装私有方法也可以的。