zoukankan      html  css  js  c++  java
  • JavaScript利用装饰模拟实现私有状态

      在经典的面向对象编程中,经常需要将对象的某个状态封装或隐藏在对象内,只有通过对象的一幅幅和能访问这些状态,对外只暴露一些重要的状态变量可以直接读写。

      我们可以通过将变量(或参数)装饰在一个构造函数内来模拟实现私有实例字段,调用构造函数会创建一个实例。

    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

  • 相关阅读:
    ng-if 下ng-model失效 ng-repeat循环输出单选框
    ng-repeat输出当前值,ng-class的使用
    SQL-select中使用条件判断语句
    JS-Ajax
    ASP.NET-缓存Cache
    MVC-Filter-脚本注入
    三层架构与MVC的区别
    MVC-Route
    cookie-session
    初衷
  • 原文地址:https://www.cnblogs.com/-------perfect/p/4616748.html
Copyright © 2011-2022 走看看