访问器

课后整理 2020-12-10

除了使用点语法或中括号语法访问属性的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()只能接受一个参数,用于设置属性的值。