get 用以定义获取时执行的函数,会有一个返回值
set 用以定义设置时执行的函数
作用:
用来代替内部属性被外部访问
用以设置一个计算属性的值
用来监听某个值的变化而改变其他属性值
1. 基本用法
通过 get 和 set 定义一个属性,代替内部属性被外部访问
var o = {
_age:18,
get age(){
return this._age;
},
set age(val) {
this._age = val;
}
}
o.age //=> 18
o.age = 23
o.age //=> 23
o._age //=> 23
下划线开头的属性表示对象内部的属性,一般不直接在外面访问,而是通过对象内的方法访问。
在 get 中返回其他属性的计算结果,来定义一个计算属性
var user = {
firstName: '三',
lastName: '张',
get fullName(){
return this.lastName + this.firstName;
}
}
user.fullName //=> '张三'
通过在 set 中执行相应的操作,来监听某个值的变化从而改变其他属性值
var o = {
_year: 2018
age:18,
get year(){
return this._year;
},
set year(val) {
this._year= val;
this.age = val - 2018 + this.age;
}
}
o.age //=> 18
o.year = 2019
o.age //=> 19
2. Object.defineProperty
可以通过 Object.defineProperty 来定义对象属性的 set 和 get 函数
var book = {
_year: 2004,
edition: 1
};
Object.defineProperty(book, "year", {
get: function(){
return this._year;
},
set: function() {
if(newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005;
alert(book.edition); //2
这个方法同样可以定义其初始值,并且设置其属性的内部数据属性。这样设置的 get/set 也会像前面那种方法一样在对象中呈现出来