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

  • 相关阅读:
    了解Whitehorse
    更新排行榜说明
    一个从Microsoft Word发表Blog文章的工具
    首页"进入我的博客"可以正常使用了
    ADO.NET: Close()与Dispose() 的讨论
    向大家致歉
    折腾了我一个下午及吃晚饭时间的问题
    [转帖]ASP.NET服务器端异步Web方法
    关于增加“收藏”功能的设想
    Mono 0.30发布了
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3231634.html
Copyright © 2020-2023  润新知