龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

javascript闭包模拟静态私有变量,和常量实现程序

时间:2012-12-29 08:41来源:未知 作者:admin 点击:
分享到:
本文章介绍了关于JS 闭包模拟静态私有变量,和常量有需要了解的同学可以参考一下下。 啥也不多说了,直接上代码,看原作者注释去吧,嗯。。 //静态私有变量 代码如下 var MyNamespa
本文章介绍了关于JS 闭包模拟静态私有变量,和常量有需要了解的同学可以参考一下下。

啥也不多说了,直接上代码,看原作者注释去吧,嗯。。
//静态私有变量

 代码如下

var MyNamespace = {}; // 定义命名空间

MyNamespace.TreeItem = (function() {

    //使用闭包产生的私有静态变量,不可被外部访问
    var numTreeItems = 0;

    //使用闭包产生的私有静态方法,不可被外部访问
    function counter() {
        numTreeItems ++;
        console.log("Created "+numTreeItems+" tree items!");
    }

    //该匿名函数的引用将被赋予MyNamespace.TreeItem
    return function() {
        //使用闭包产生的私有类变量,不可被外部访问
        var label;

        //可访问私有变量,也可被外部访问的方法
        this.setLabel = function( newLabel ) {
            label = newLabel;
        };
        this.getLabel = function() {
            return label;
        };
        //该方法用来累计实例的数量
        counter();
    }
})(); //在函数定义的末尾加上括号,表示该函数在定义后立即执行
//不可访问私有变量以及其它公共方法的静态公共方法
MyNamespace.TreeItem.clone = function(otherInstance) {

};
MyNamespace.TreeItem.prototype = {

    // 不可访问私有变量,但可访问其它公共方法的公共方法
    print: function() {
        console.log(this.getLabel());
    }
};

var treeItem1 = new MyNamespace.TreeItem(); // print 1
var treeItem2 = new MyNamespace.TreeItem(); // print 2
//模拟常量
// 这个Constant类用来保存应用中的所有final静态常量
var Constant = (function() {
    //不可被外部访问的闭包私有静态变量
    var constants = {
        VERSION: 7.5
    };

    //构造函数
    var constructor = function() {
    };
    //可被外部访问,也可访问闭包内私有静态变量的方法
    constructor.getConstants = function(name) {
        return constants[name];
    };
    return constructor;
})();
//访问Constant闭包中的静态常量
Constant.getConstants('VERSION'); // return 7.5

每创建一个新的TreeItem实例,内存会为其私有变量,私有方法和所有能够访问私有变量和私有方法的方法开辟物理空间,而prototype中的方法始却始终只有一个


精彩图集

赞助商链接