关于JavaScript中Get/Set访问器

       

有时候大家可能会纳闷,在使用JavaScript的时候,只需要给一个系统变量赋值就可以触发一系列操作去相应。

但是我们在写Js的时候,修改了一个自定义变量,却连个P都没有。是不是很郁闷呢?

其实,我们现在就可以做类似系统变量那样的功能了!


做个假设,我们有一个变量,要求可以输入出生年份并自动计算当前年龄。

如:

1
2
3
4
5
// 定义一个年龄变量并赋予初始值
var age = 18 ;
// 我们手动输入的出生年份
age = 1994 ;
// 此时age=?

大家可能说我最后的这个疑问有毛病,骂我是SB。。。没关系。。。刚才我们提过需求了嘛……

按需求来说,age这个时候应该是等于20。

很明显要做这个操作我们要调用一个函数来进行处理,但是能不能不手动调用函数来完成这个功能呢?

下面我们来介绍一下此章主角 Get/Set访问器!


说明了,就是我们可以限制一个变量是否可以被访问或是否可以被重写。

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


使用方法一:

1
2
3
4
5
6
7
8
9
10
var age = 18 ;
var test = {
     get age (){
         return  age;
     },
     set age (value){
         if (value > 100 ) age= new  Date().getFullYear() - value;
         else  age = value;
     }
};
这个时候我们再写如下代码来进行操作。
1
2
test.age = 1994 ;
alert(test.age);
如何?是不是正确的显示了20这个数字?

可是以上方法比较麻烦也不好理解。我们来看看第二种方法是否更有实用性:

1
2
3
4
5
6
7
function Person() {
     var age = new  Date().getFullYear() - 18 ;
     Object.defineProperty( this , "age" , {
         get: function () { alert( "内部存储数据为:"  + age); return  new  Date().getFullYear() - age; },
         set: function (value) { age = value; }
     });
}
使用以下代码测试:
1
2
3
var p = new  Person();
p.age = 1994 ;
alert( "外部获取到的数据为:"  + p.age);


具体使用哪种方法按照需求进行选择。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值