• js 静态私有变量


      特权方法:有权访问私有变量和私有函数的公有方法。在私有作用域中定义私有变量或函数,可以创建特权方法,如下:

    示例1

    (function(){
        //私有变量和私有函数
        var privateVariable = 10;
        
        function privateFunction(){
            return false;
        }
        
        //构造函数
        MyObject = function(){
        }
        
        //公有/特权方法
        MyObject.prototype.publicMethod = function(){
            privateVariable ++;
            return privateFunction();
        }    
    })();
    
    var object = new MyObject();
    console.log(object.publicMethod());//false

      上面模式在定义构造函数时并没有使用函数声明,而是使用了函数表达式。函数声明只能创建局部函数,我们需要在私有作用域外面使用构造函数。声明MyObject时也没有使用var,这样MyObject就成了一个全局变量,能够在私有作用域之外被访问。

      由于特权方法是在原型上定义的,因此所有的实例都使用同一个函数,而这个特权方法,作为一个闭包,总是保存着对包含作用域的引用。

    示例2:

    (function(){
    
        var name = '';
       
        Person = function(value){
            name  = value;     
        }
    
        Person.prototype.getName = function(){
            return name;
        }
    
        Person.prototype.setName = function(value){
              name = value;
        }
    })();
    
    var person1 = new Person('Tom');
    var person2 = new Person('Lucy');
    console.log(person1.getName());//Lucy
    console.log(person2.getName());//Lucy

    这个例子Person构造函数和getName()和setName()方法都能访问私有变量name,变量name就变成了一个静态的、所有实例共享的属性。也就是在一个实例上调用setName()会影响所有的实例。

  • 相关阅读:
    [转]c#匿名类
    MVC中的验证码
    js常用方法
    centos6.x一直停留在进度条的问题
    使用linux flock文件锁实现任务锁定避免计划任务程序冲突
    nginx访问日志的几个统计命令
    centos安装tidy扩展
    用alert打印js对象
    laravel中的管道设计模式
    CentOS查看每个进程的网络流量
  • 原文地址:https://www.cnblogs.com/tianxintian22/p/5045017.html
Copyright © 2020-2023  润新知