读写属性
使用访问器属性的其他场景还有后写入属性时进行合理性检查,以及每次读取属性时返回不同的值:
// 这个对象保证序号严格递增
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; }
};