getter和setter以及defineProperty的用法

时间:2021-02-22 09:55:00 来源:互联网 热度: 作者: 佚名 字体:

getter 和 setter 和 defineProperty

  • getter:将对象属性绑定到查询该属性时将被调用的函数
    • 说人话就是,当你调用一个getter属性时会调用定义好的get函数,这个函数会返回一些运算结果的值(一般是用其他属性作为运算值),这个值就作为你调用的这个属性的值。
  • setter: 当尝试设置属性时,set语法将对象属性绑定到要调用的函数
    • 说人话就是,当你设置一个setter属性的值时会调用定义好的set函数(可以传入参数),这个函数会将这个对象的其他属性设置为传入的参数计算过后的值。
  1. 使用defineProperty在现有对象上定义getter:

要随时将getter添加到现有对象上,使用Object.defineProperty()

    const o = { a:0 }
    Object.defineProperty(o, 'b', { get: function() {return this.a + 1}});
    console.log(o.b) // Runs the getter, which yields a + 1(which is 1)

  1. 使用defineProperty为当前对象定义setter
    const o = { a: 0 }
    Object.defineProperty(o, 'b', {set: function(x) { this.a = x/2; }});
    o.b = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property
    console.log (o.a) // 5