A-A+

javascript闭包模拟静态私有变量,和常量实现程序

2016年01月14日 编程技术 暂无评论

本文章介绍了关于JS 闭包模拟静态私有变量,和常量有需要了解的同学可以参考一下下,啥也不多说了,直接上代码,看原作者注释去吧,嗯。。

  1. //静态私有变量  
  2. var MyNamespace = {}; // 定义命名空间  
  3. MyNamespace.TreeItem = (function() {  
  4.     //使用闭包产生的私有静态变量,不可被外部访问  
  5.     var numTreeItems = 0;  
  6.     //使用闭包产生的私有静态方法,不可被外部访问  
  7.     function counter() {  
  8.         numTreeItems ++;  
  9.         console.log("Created "+numTreeItems+" tree items!");  
  10.     }  
  11.     //该匿名函数的引用将被赋予MyNamespace.TreeItem  
  12.     return function() {  
  13.         //使用闭包产生的私有类变量,不可被外部访问  
  14.         var label;  
  15.         //可访问私有变量,也可被外部访问的方法  
  16.         this.setLabel = function( newLabel ) {  
  17.             label = newLabel;  
  18.         };  
  19.         this.getLabel = function() {  
  20.             return label;  
  21.         };  
  22.         //该方法用来累计实例的数量  
  23.         counter();  
  24.     }  
  25. })(); //在函数定义的末尾加上括号,表示该函数在定义后立即执行  
  26. //不可访问私有变量以及其它公共方法的静态公共方法  
  27. MyNamespace.TreeItem.clone = function(otherInstance) {  
  28. };  
  29. MyNamespace.TreeItem.prototype = {  
  30.     // 不可访问私有变量,但可访问其它公共方法的公共方法  
  31.     print: function() {  
  32.         console.log(this.getLabel());  
  33.     }  
  34. };  
  35. var treeItem1 = new MyNamespace.TreeItem(); // print 1  
  36. var treeItem2 = new MyNamespace.TreeItem(); // print 2  
  37. //模拟常量  
  38. // 这个Constant类用来保存应用中的所有final静态常量  
  39. var Constant = (function() {  
  40.     //不可被外部访问的闭包私有静态变量  
  41.     var constants = {  
  42.         VERSION: 7.5  
  43.     };  
  44.     //构造函数  
  45.     var constructor = function() {  
  46.     };  
  47.     //可被外部访问,也可访问闭包内私有静态变量的方法  
  48.     constructor.getConstants = function(name) {  
  49.         return constants[name];  
  50.     };  
  51.     return constructor;  
  52. })();  
  53. //访问Constant闭包中的静态常量  
  54. Constant.getConstants('VERSION'); // return 7.5  

每创建一个新的TreeItem实例,内存会为其私有变量,私有方法和所有能够访问私有变量和私有方法的方法开辟物理空间,而prototype中的方法始却始终只有一个.

标签:

给我留言