JavaScript利用装饰模拟实现私有状态
2015-07-02 17:59
537 查看
在经典的面向对象编程中,经常需要将对象的某个状态封装或隐藏在对象内,只有通过对象的一幅幅和能访问这些状态,对外只暴露一些重要的状态变量可以直接读写。
我们可以通过将变量(或参数)装饰在一个构造函数内来模拟实现私有实例字段,调用构造函数会创建一个实例。
需要注意的是,这种封装技术造成了更多系统开销。使用了闭包来封闭类的状态的类一定会比不使用封装的状态变量的等价类运行速度更慢,并占用更多内存。
来源于《Javascript权威指南》 9.6.6
我们可以通过将变量(或参数)装饰在一个构造函数内来模拟实现私有实例字段,调用构造函数会创建一个实例。
function Range(from,to){ //不要将商战保存为对象的属性,相反 //定义存取器函数来返回端点的值 //这些值都保存在闭包中 this.from=function(){return from;} this.to=function(){return to;} } Range.prototype={ constructor:Range, includes:function(x){return this.from() <=x && x<=this.to();}, foreach:function(f){ for(var x=Math.ceil(this.from()),max=this.to();x<=max;x++;) f(x); }, toString:function(){ return "(" +this.from() +"..." +this.to() +")"; } } //调用: var r=new Range(0,5); //一个不可修改的范围 r.from=function(){ return 0; } //通过这个方法来修改它
需要注意的是,这种封装技术造成了更多系统开销。使用了闭包来封闭类的状态的类一定会比不使用封装的状态变量的等价类运行速度更慢,并占用更多内存。
来源于《Javascript权威指南》 9.6.6
相关文章推荐
- 如何使用 Chrome 浏览器调试动态加载的 Javascript 脚本
- JavaScript中的作用域和作用域链(一)
- js验证一段字符串既有数字也有英文的正则表达式
- perl6 JSON::Fast模块json解析的使用
- ajaxfileupload.js 实现异步上传图片
- JSP复习内容
- 【Servlet和JSP-学习-1】基础知识
- JS正则表达式验证数字非常全
- JS验证身份证的合法性
- js验证密码必须为大小写字母和数字组成
- javaScript实现多语言切换
- 在LAMP环境下搭建JSP动态网页
- javascript之scrollTop
- JSP页面上显示XML信息(库里读出)
- JS获取用户屏幕信息
- html 、jsp笔记
- JS location对象
- jstree使用小结(三)
- .Net 与 Javascript 混合编程系列(如何穿透.net 和 js 的边界)
- [js开源组件开发]table表格组件