除了使用点语法或中括号语法访问属性的value外,还可以使用访问器,包括set和get两个函数。其中,set()函数可以设置value属性值,而get()函数可以读取value属性值。
借助访问器,可以为属性的value设计高级功能,如禁用部分特性、设计访问条件、利用内部变量或属性进行数据处理等。
【示例1】下面示例设计对象obj的x属性值必须为数字。为属性x定义了get和set特性。obj.x取值时,就会调用get;赋值时,就会调用set。
var obj = Object.create(Object.prototype, {
_x : { //数据属性
value : 1, //初始值
writable:true
},
x: { //访问器属性
get: function( ) { //getter
return this._x ; //返回_x属性值
},
set: function(value) { //setter
if(typeof value != "number" ) throw new Error('请输入数字');
this._x = value; //赋值
}
}
});
console.log(obj.x); //1
obj.x = "2"; //抛出异常
【示例2】JavaScript也支持一种简写方法。针对示例1,通过如下方式可以快速定义属性。
var obj ={
_x : 1, //定义_x属性
get x() { return this._x }, //定义x属性的getter
set x( value ) { //定义x属性的setter
if(typeof value != "number" ) throw new Error('请输入数字');
this._x = value; //赋值
}
};
console.log(obj.x); //1
obj.x = 2;
console.log(obj.x); //2
【注意】
取值函数get()不能接受参数,存值函数se()只能接受一个参数,用于设置属性的值。