getter
语法将对象属性绑定到查询该属性时将被调用的函数。
{get prop() {// do something}}{get [expression]() {// do something}}
参数:
参数 | 说明 |
---|---|
prop | 要绑定到给定函数的属性名 |
expression | 一个计算属性名的表达式 |
有时需要允许访问返回动态计算值的属性,或者你可能需要反映内部变量的状态,而不需要使用显式方法调用。在 JavaScript 中,可以使用 getter
来实现。虽然可以使用 getter
和 setter
来创建一个伪属性类型,但是不可能同时将一个 getter
绑定到一个属性并且该属性实际上具有一个值。
使用 get
语法时应注意以下问题:
get
或具有相同属性的数据条目同时出现在一个对象字面量中。可以通过 delete
操作符删除 getter。
const foo = {arr: [0, 1, 2, 3, 4],get num(){// 只有数组长度等于 5 时,获取 foo.b 才返回数组索引为 1 的值if (this.arr.length === 5) {return this.arr[1]}}}console.log(foo.num)// 1
const foo = {get name() {return 'BINGO!'}}console.log(foo.name)// Output: 'BINGO!'delete foo.name// trueconsole.log(foo.name)// Output: undefined
可以使用 defineProperty
方法在现有对象上定义取值函数。
let foo = {a: 0};Object.definedProperty(foo, "b", {get: function () {return this.a + 1;}});console.log(foo.b);// Runs the getter, which yields a + 1 (which is 1)
const expr = 'foo';const obj = {get [expr]() { return 'bar'; }}console.log(obj.foo)// 'bar'
当尝试设置属性时,set
语法将对象属性绑定到要调用的函数。
{set prop(val) { . . . }}{set [expression](val) { . . . }}
参数:
参数 | 说明 |
---|---|
prop | 要绑定到给定函数的属性值 |
val | 用于保存尝试分配给 prop 值的变量的一个别名 |
expression | 从 ECMAScript 2015 开始,还可以使用一个计算属性名的表达式绑定到给定的函数 |
在 JavaScript 中,如果试着改变一个属性的值,那么对应的 setter
将被执行。setter
经常和 getter
连用以创建一个伪属性。不可能在具有真实值的属性上同时拥有一个 setter
器。
使用 set
语法时请注意:
set
,也不能为一个属性设置多个 set
const foo = {set current(name) {this.log.push(name)},log: []}foo.current = 'EN'console.log(foo.log)// ['EN']foo.current = 'ZN'console.log(foo.log)// ['EN', 'ZN']