JavaScript 面向对象程序设计(2)——封装

 

2.4 私有静态成员

前面在基本概念里我们已经清楚了,只有用 function 创建函数,才能创建一个新的作用域,而要创建私有成员(不论是静态成员,还是实例成员),都需要通过创建新的作用域才能够起到数据隐藏的目的。下面所采用的方法就是基于这一点来实现的。

实现私有静态成员是通过创建一个匿名函数函数来创建一个新的作用域来实现的。

通常我们使用匿名函数时都是将它赋值给一个变量,然后通过这个变量引用该匿名函数。这种情况下,该匿名函数可以被反复调用或者作为类去创建对象。而这里,我们创建的匿名函数不赋值给任何变量,在它创建后立即执行,或者立即实例化为一个对象,并且该对象也不赋值给任何变量,这种情况下,该函数本身或者它实例化后的对象都不能够被再次存取,因此它唯一的作用就是创建了一个新的作用域,并隔离了它内部的所有局部变量和函数。因此,这些局部变量和函数就成了我们所需要的私有静态成员。而这个立即执行的匿名函数或者立即实例化的匿名函数我们称它为静态封装环境。

下面我们先来看通过直接调用匿名函数方式来创建带有私有静态成员的类的例子:

  1. class5 = (function() {
  2.     // private static fields
  3.     var s_first = 1;
  4.     var s_second = 2;
  5.     // private static methods
  6.     function s_method1() {
  7.         s_first++;
  8.     }
  9.     var s_second = 2;
  10.     function constructor() {
  11.         // private fields
  12.         var m_first = 1;
  13.         var m_second = 2;
  14.         // private methods
  15.         function method1() {
  16.             alert(m_first);
  17.         }
  18.         var method2 = function() {
  19.             alert(m_second);
  20.         }
  21.         // public fields
  22.         this.first = "first";
  23.         this.second = ['s','e','c','o','n','d'];
  24.         // public methods
  25.         this.method1 = function() {
  26.             s_second--;
  27.         }
  28.         this.method2 = function() {
  29.             alert(this.second);
  30.         }
  31.         // constructor
  32.         {
  33.             s_method1();
  34.             this.method1();
  35.         }
  36.     }
  37.     // public static methods
  38.     constructor.method1 = function() {
  39.         s_first++;
  40.         alert(s_first);
  41.     }
  42.     constructor.method2 = function() {
  43.         alert(s_second);
  44.     }
  45.     return constructor;
  46. })();
  47. var o1 = new class5();
  48. class5.method1();
  49. class5.method2();
  50. o1.method2();
  51. var o2 = new class5();
  52. class5.method1();
  53. class5.method2();
  54. o2.method2();

这个例子中,通过

  1. (function() {
  2.      ...
  3.     function contructor () {
  4.          ...
  5.     }
  6.     return constructor;
  7. })();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值