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()会影响所有的实例。

 

转载于:https://www.cnblogs.com/tianxintian22/p/5045017.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值