Javascript 的函数式对象 利用闭包模拟类的静态变量和方法
2016-05-21 13:46
387 查看
除了模拟类的私有变量和私有方法。闭包还可用来模拟类的静态变量和方法。
除了再次利用js的闭包特性,还需要借助js语法上的一些特点。看下面一段代码:
执行上述代码后,浏览器控制台将会输出如下字符串:
Created 1 tree items!
Created 2 tree items!
之所以把上述一些js变量和函数称为“静态”,是借用了Java的提法。
这些“静态”变量和方法被保存在闭包中,在内存中是唯一的,
不会随着该函数副本的增加而增加。如果一个函数需要被实例化多次,
但其中的一些内部函数并不需要访问任何实例数据,从节省内存的角度考虑,
可采用上述构建静态函数的方法。js中的“静态”概念,有一点与Java不同:
如果上述TreeItem被设为null,即不再有引用指向它,那么它的闭包也将消失,
保存在闭包中的静态变量和方法,也将被垃圾回收器择机回收。
原文来自:http://hbc8848.iteye.com/blog/798724
除了再次利用js的闭包特性,还需要借助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
执行上述代码后,浏览器控制台将会输出如下字符串:
Created 1 tree items!
Created 2 tree items!
之所以把上述一些js变量和函数称为“静态”,是借用了Java的提法。
这些“静态”变量和方法被保存在闭包中,在内存中是唯一的,
不会随着该函数副本的增加而增加。如果一个函数需要被实例化多次,
但其中的一些内部函数并不需要访问任何实例数据,从节省内存的角度考虑,
可采用上述构建静态函数的方法。js中的“静态”概念,有一点与Java不同:
如果上述TreeItem被设为null,即不再有引用指向它,那么它的闭包也将消失,
保存在闭包中的静态变量和方法,也将被垃圾回收器择机回收。
原文来自:http://hbc8848.iteye.com/blog/798724
相关文章推荐
- ExtJs框架 文件上传
- JSP+Serverlet+javaScript+ajax实现实时检测用户名是否被占用
- JavaScript 笔记
- 浅析正则表达式-替换原则(.NET) 图文
- JavaScript 常量
- [笔记]前端html设计与js代码分离
- js数据类型
- 空间数据可视化:ArcGIS JavaScript API 二、三维数据一体化
- JavaScript 笔记
- json多层数组的反序列化
- 怎么样阻止a标签的默认行为
- js用户管理中心tab切换界面模板
- JavaScript DOM中 改变样式属性,实现动画效果
- JavaScript DOM中 改变样式属性,实现动画效果
- JavaScript DOM中 改变样式属性,实现动画效果
- JavaScript DOM中 改变样式属性,实现动画效果
- JavaScript DOM中 改变样式属性,实现动画效果
- JavaScript DOM中 改变样式属性,实现动画效果
- JavaScript DOM中 改变样式属性,实现动画效果
- JavaScript DOM中 改变样式属性,实现动画效果