js模拟类的公有与私有 方法与变量

 1 var myConstructor = function(message){
 2     //实例变量
 3     this.message = message;
 4 
 5     //私有变量,外部不可见。用var声明的变量具有块作用域
 6     var separator = '-';
 7     var owner = this;
 8     
 9     //私有方法:只能在构造器内调用
10     function alertMessage(){
11        alert(owner.message);
12        //alert(this.message);则下面concatMessage()方法会显示undefined
13     }
14 
15     //与前面一样是私有方法
16     //注意:这种做法在脚本执行到该赋值语句之前 alertMessage()函数是不存在的。
17     //如果在该定义发生之前调用alertMessage()将会出错。
18     //var alertMessage =function (){
19     //     alert(owner.message);
20     //}
21 
22     //特权方法(也是公有方法)。可访问内部私有变量,也能被外部调用
23     this.concatMessage = function(string){
24         this.message += separator + string;
25         alertMessage();
26     }  
27 }
28 
29 //公有方法,但不是特权方法,不能访问separator变量。出错:separator is undefined
30 //去掉separator后可以正常工作
31 //myConstructor.prototype.concatMessage = function(string){
32 //    this.message += separator + string;
33 //    alert(this.message);
34 //}
35 
36 var two = new myConstructor('a');
37 //私有方法,外部不能调用 
38 //two.alertMessage();
39 two.concatMessage('b');

注意:

1.由于私有和特权成员在函数的内部,因此在创建实例时,每个实例都会包含同样的私有和特权成员副本。所以实例越多,占用的内存也就越多。

posted @ 2013-08-02 01:09  等风来。。  Views(477)  Comments(0Edit  收藏  举报
------------------------------------------------------------------------------------------------------------ --------------- 欢迎联系 x.guan.ling@gmail.com--------------- ------------------------------------------------------------------------------------------------------------