读书笔记:对象的属性

  • 访问器属性

访问器属性不包含数据值,他们包含一堆getter和setter函数

  1. 在读取访问属性时,会调用getter函数,这个函数负责返回有效的值;
  2. 在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据
  1. [[Configurable]] 默认true, 表示可以通过delete来删除属性从而重新定义该属性
  2. [[Enumerable]] 默认true: 表示可以通过for-in循环返回属性
  3. [[Get]] 默认值为undefined
  4. [[Set]] 默认值为undefined

=====================================================
应用:设置一个属性的值会导致其他属性发生变化
在这个例子中,edition的值随着year属性变化

var book = {
    _year:2004,
    // 编程约定:带下划线的属性要通过方法来访问
    edition:1
};
// 定义一个新的属性”year“ , 为它设置访问器属性
Object.defineProperty(book,"year",{
    get: function(){
        return this._year;
    }
    set: function(newValue) {
        if (newValue > 2004) {
            this._year = newValue;
            this.edition  += newValue - 2004;
        }
    }
});
book.year = 2020;
alert(book.edition);
  • 数据属性
    1. [[Configurable]] configurable 表示该属性特征是否可以修改
    2. [[Enumerable]] enumerable
    3. [[Wriable]] writable
    4. [[Value]] 保存值 value

注意事项:

  1. 可以使用Object.defineProperty()来修改属性的默认特征
  2. configurable默认值为true, 当改为false后,不能再次修改

参考:

  • 《JavaScript程序设计第3版》
上一篇:VUE数据变化视图不更新解决方案


下一篇:定时器控制div移动,封装动态常用函数