// 在Es5中可以使用getter和setter部分改写默认操作,
// 但是只能应用在单个属性上,无法应用在整个对象上。
// getter是一个隐藏函数,会在获取属性值时调用。
// setter也是一个隐藏函数,会在设置属性值时调用。
// 创建 getter 和 setter 有三种不同的方式:
// 默认的句法(getter 和 setter 方法)
// 使用 get 和 set 关键字
// 使用 Object.defineProperty() 方法
// 对象有两种属性:
//(1)数据属性,就是我们经常使用的属性
//(2)访问器属性,也称存取器属性
// 存取器属性就是一组获取和设置值的函数。
// getter负责获取值,它不带任何参数。
// setter负责设置值,在它的函数体中,一切的return都是无效的。
var o = {
get val() {
// 函数体
return;
},
set val(n) {
// 函数体
}
}
// 在对象内如果设置了存取器属性,
// 如果某一变量只声明了getter方法,那么它仅仅只可读而不可写。
// 如果只声明了setter方法,那么读到的该变量值永远都是undefined。
// 原因:必须得先获取到值,才能对值进行操作;即先get后set
// 只声明getter方法时不能通过getter方法来改变变量值
var obj = {
a: 3,
b: 8,
get val() {
return this.a;
}
}
console.log(obj.val); //3
obj.val = 100;
console.log(obj.val); //3
//只声明setter方法时不能获取变量的值
var obj = {
a: 3,
b: 8,
set val(n) {
this.a = n;
}
}
console.log(obj.val); //undefined
obj.val = 100;
console.log(obj.val); //undefined
console.log(obj.b); //8 其他变量不受影响
//同时声明两种方法
var obj = {
a: 3,
b: 8,
get val() {
return this.a;
},
set val(n) {
this.a = n;
}
}
console.log(obj.val); //3
obj.val = 100;
console.log(obj.val); //100