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