2022-01-06(Object.proPerty、双向数据绑定原理)


Object.defineProperty(objectName, key, option);

  • Object.defineProperty()可以直接在一个对象上定义一个新属性, 或者修改一个属性, 并返回该对象;
  • option
    • value: 表示该属性的值, 默认 undefined。
    • get: getter 函数, 访问该属性时被调用,传参为空,会传入 this 对象,该函数的返回值会被作为访问值,默认为 undefined。
    • set: setter 函数,修改该属性是调用, 传参为赋予的新值,会传入赋值时的 this 对象,默认为 undefined。
    • writable: true 表示可以被赋值运算符改变,默认 false。
    • configurable: 特性表示对象的属性是否可以被删除,以及除 value 和 writable 特性外的其他特性是否可以被修改,默认 false。
    • enumerable: true 表示可以在对象枚举属性中; 默认 false。
  • key Remark 描述符(key)分两种, 数据描述符没有 get/set,存取描述符以上 value -> enumerable 都有
let OBJ = {};
const typeName = 'rule';
Object.defineProperty(OBJ, 'name', {
  value: 'king',
});
console.info(OBJ.name); // king
// getter setter
Object.defineProperty(OBJ, 'type', {
  // value: 'Blo',
  get: function() {
    console.log(this);
    return typeName;
  },
  set: function(value) {
    console.log(value);
  },
});