javascript中Get/Set访问器

Get/Set访问器

可以限制一个变量是否可以被访问或是否可以被重写。另外还有一个功能是,我们在访问或重写时可以执行其他语句进行处理

get是得到:一般是要返回的, set是设置:不用返回

var p = {
        name:"chen",
        work:function() {
            console.log("wording...");
        },
        _age:18,
        get age(){
            return this._age;
        },
        set age(val) {
            if (val<0 || val> 100) {//如果年龄大于100就抛出错误
                throw new Error("invalid value")
            }else{
                this._age = val;
            }
        }
    };
    console.log(p.name);//输出chen
p.age
//"18"
p.age=23
//"23"
p.age=200
//Uncaught Error: invalid value

另一种方法( Object.defineProperty将属性添加到对象,或修改现有属性的特性。):
function Person(){
        var age=18;
        Object.defineProperty(this,'age',{
            get:function(){return age+new Date().getFullYear()},
            set:function(value){age=value;}
        });
    }
var p = new Person();
p.age ;  //2035

get/set与原型链

//不包含get/set的原型
function p(){}
p.prototype.z = 9;
var p1 = new p();
p1.z  //9    //对象上没有属性,将在原型链上查找
p1.z = 10;    //原型上不包含get/set方法时,向原型上的同名属性赋值,会在对象上添加此属性
p1.z //10     //对象上能够找到属性,将不会在原型链上查找

//原型上包含get/set方法
function person(){}
Object.defineProperty(person.prototype,'z',{get:function(){return 1}});
var p = new person();
p.z  //1
p.z = 89;
p.z  //still 1     原型链上get/set方法,操作此属性的时候,会向上查找原型链。 所以p.z仍旧是1 









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值