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

  • 相关阅读:
    全局配置策略
    RESTful api介绍
    AJAX
    django cookie session 自定义分页
    mysql 索引优化
    yii2 response响应配置
    Django中的信号
    django orm相关操作
    django orm介绍以及字段和参数
    django form和ModelForm组件
  • 原文地址:https://www.cnblogs.com/-------perfect/p/4616748.html
Copyright © 2011-2022 走看看