有时候大家可能会纳闷,在使用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);
|
可是以上方法比较麻烦也不好理解。我们来看看第二种方法是否更有实用性:
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);
|
具体使用哪种方法按照需求进行选择。