JavaScript中对象的属性可以分为数据属性和访问器属性
访问器属性包括getter和setter方法
getter是读取对象属性时调用的函数setter是写入对象属性时调用的函数
访问器属性不能直接定义,必须使用Object.defineProperty()来定义
下面用一段代码来解释:
var person = {
_age: 16,
kind: 'young'
}
// Object.defineProperty(obj, prop, descriptor)
// obj 要在其上定义属性的对象。
// prop 要定义或修改的属性的名称。
// descriptor 将被定义或修改的属性描述符。
Object.defineProperty(person, "age", {
//getter函数
get() { //ES6语法 get() 等价于 get: function()
return this._age;
},
//setter函数
set(newValue) {
if (newValue < 18) {
this.kind = 'young'
} else {
this.kind = 'adult'
}
this._age = newValue
}
})
//读取对象的属性值时,调用get()方法,返回 person._age 的值
console.log(person.kind) //输出:young
console.log(person.age) //输出:16
//为对象的属性写入值时,调用set()方法,执行判断程序,<18修改kind为young,>18修改kind为adult
person.age = 24
console.log(person.kind) //输出:adult
console.log(person.age) //输出:24
综上所述,getter和setter相当于对一个对象person的属性age进行监控
当属性age被读取时调用getter函数;当age被写入时调用setter函数。