js对象的get 和 set

get propertyName(){} 用来得到当前属性值得回调函数

set propertyName(){} 用来监视当前属性值变化的回调函数

存诸器属性和数据属性:

var num= {
    a: 2,
    get b(){
        return 2;
    }   
};
console.log(num.a);//2
console.log(num.b);//2

上面的代码中,属性a称为“数据属性”,它只有一个简单的值;像属性b这种用getter和setter方法定义的属性称为“存取器属性”。
存取器属性定义为一个或两个与属性同名的函数,这个函数定义没有使用function关键字,而是使用get或set,也没有使用冒号将属性名和函数体分开,但函数体的结束和下一个方法之间有逗号隔开。
当程序查询存取器的属性值时,JavaScript代用getter方法(无参数),这个方法的返回值就是该属性存取表达式的值。当程序设置一个存取器属性值时,JavaScript调用setter方法,将赋值表达式右侧的值当作参数传入setter。从某种意义上来说,这个方法负责设置属性值,可以忽略该方法的返回值。
当一个属性被定义为存取器属性时,JavaScript会忽略它的value和writable特性,取而代之的是set和get(还有configurable和enumerable)特性。
对象本身的两个方法

1. es5

  • 原型属性写法
function Num(n){
    this._num = n;
}
Num.prototype = {
    get num() {
        console.log('get');
        return this._num;
    },
    set num(n) {
        console.log(n,"set")
        this._num = n;
    }
}
let nu = new Num(3);
console.log(nu.num,"============")//get
nu.num = 34 //34 set
console.log(nu.num,"------------") //get
  • 对象属性写法
function Num(n){
    let me = this;
    me._num = n;
    return {
        get num(){
            console.log("get")
            return me._num;
        },
        set num(n) {
            console.log("set",n);
            me._num = n;
        }
    }
}
let nu = new Num(3);
console.log(nu.num,"============")//get
nu.num = 34 //34 set
console.log(nu.num,"------------") //get

2. es6写法

class Num {
    constructor(n) {
          this._num = n;
    }
    get num() {
        console.log("get")
        return this._num;
    }
    set num(n) {
        console.log("set",n)
        this._num = n;
    }
  }
  
let nu = new Num(3);
nu.num = 6 //set 6
// console.log(nu.num,"============") //get 6 =============
nu.num = 34 //set 34
console.log(nu.num,"------------")  //get 34 =============
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容