人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

读写属性

使用访问器属性的其他场景还有后写入属性时进行合理性检查,以及每次读取属性时返回不同的值:

// 这个对象保证序号严格递增
const serialnum = {
    // 这个数据属性保存下一个序号
    // 属性名中的_提示它仅在内部使用
    _n: 0,
    
    // 返回当前值并递增
    get next() { return this._n++; },
    
    //把新增设置为n,但n必须大于当前值
    set next(n) {
        if (n > this._n) this._n = n;
        else throw new Error("serial number can only be set to a larger value");
    }
};
serialnum.next = 10; // 设置起始序号
serialnum.next       // => 10
serialnum.next       // => 11:每次读取next都得到不同的值

最后,再看一个通过获取方法实现“魔法”属性的实例:

// 这个对象的访问器属性返回随机数值
// 例如,表达式"random.octet"在被求值时
// 会给出一个0和255之间的随机值
const random = {
    get octet() { return Math.floor(Math.random()*256); },
    get uint16() { return Math.floor(Math.random()*65536); },
    get int16() { return Math.floor(Math.random()*65536)-32768; }
};

 

posted @ 2022-03-11 16:19  0a  阅读(48)  评论(0编辑  收藏  举报