js实现私有变量

一、块级作用域

  js中没有块级作用域的概念,可用匿名函数实现,由于匿名函数执行完一遍后,内部没有引用其变量对象的函数,其变量对象被清除,后面则引用不到其中的变量

(function(){
//块级作用域
})();

二、私有变量

只能函数内部访问,外界无法访问

在构造函数中定义特权方法,每次创建新对象时都会创建同样一组新方法。

function MyObject(){
    //私有变量
    var p=10;
    function pFunction(){
        return 1;    
    }
    //用来访问私有变量的特权方法
    this.public=function(){
        p++;
        return pFunction();
    }
}


三、静态私有变量

私有变量和函数又实例共享

function(){
    var p=10;
    function pFunction(){
        return 1;
    }
    //构造函数    
    MyObject=function(){
    };
    //公有方法    
    MyObject.prototype.public=function(){
        p++;
        return pFunction();
    }
})();

四、模块模式

为单例(只有一个实例的对象)创建私有变量和方法。

var singleton=function(){
    var p=10;
    function pFunction(){
        return 1;
    }
    
    return{
        pubMethod:function(){
            p++;
            return pFunction();
        }
    }
}();


五、模块加强模式

可以控制单例是什么类型对象

var singleton=function(){
    var p=10;
    function pFunction(){
        return 1;
    }
    
    var obj=new customer();

    obj.pubMethod=function(){
        ...
    }

    return obj;
}();
原文地址:https://www.cnblogs.com/shytong/p/4966579.html