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

  • 相关阅读:
    2017 ACM-ICPC西安网赛B-Coin
    Codeforces389D(SummerTrainingDay01-J)
    Codeforces672D(SummerTrainingDay01-I)
    VS2017.滚动条选项
    VS.自动调试
    ffmpeg.mp4.格式资料
    vs2017.unresolved external symbol __imp__fprintf&__imp____iob_func
    vs2017."const char *"的实参与"char *"的形参不兼容_goto跳过类型声明
    vue项目开发时怎么解决跨域
    vue奇怪的知识点又增加了
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3231634.html
Copyright © 2011-2022 走看看