2011三月18
JS 闭包模拟静态私有变量,和常量
本文转载自:http://hbc8848.javaeye.com/blog/798724
http://hbc8848.javaeye.com/blog/801221
啥也不多说了,直接上代码,看原作者注释去吧,嗯。。
//静态私有变量
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
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
// 这个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
文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2011/03/18/2039/
版权所有 © 转载时必须以链接形式注明作者和原始出处!
js的闭包是个神奇的东东。。。
发现你换主题了,同样是简洁轻快的风格
[回复]
@荒野无灯
呵呵。一款用时间长了,总会发现一些不适应。
我不喜欢太复杂的东东
[回复]
好久没来四毛猪这边啦,话说刚刚不小心看到这个http://blogread.cn/it/article.php?id=2110&f=sr
话说最近看到这个站抓的国内技术博客内容越来越多啦
[回复]
@小明猪
呃。还有人抓我页面吗?呼。。
[回复]