Object.defineProperty(js的问题)

定义

Object.defineProperty(obj, prop, descriptor)

/*
obj:需要定义属性的对象
prop:需要定义的属性
descriptor:属性的描述描述符
返回值:返回此对象
*/
var obj = {}

// 数据描述符
var descriptor = {
  // 能否delete删除,
  configurable: false,
  // 是否可写,默认false, 不能被赋值,只读
  writable: false,
  // 是否可枚举,即是否可以for...in访问属性,默认false
  enumerable: false,
  // 属性值,默认undefined
  value: 'hello',

  // 访问器描述符,不能与数据描述符同时使用
  // get: 读取,默认undefined
  // set: 设置,默认undefined
}

Object.defineProperty(obj, 'name', descriptor)
console.log(obj.name)

示例:数据响应式 vue

function defineReactive(obj, key, val) {
  // val,由于闭包的存在,不会被销毁
  Object.defineProperty(obj, key, {
    get() {
      console.log('get');
      return val;
    },
    set(newVal) {
      if (newVal != val) {
        console.log('set');
        val = newVal;
      }
    },
  });
}


var obj = {};
defineReactive(obj, 'foo', '123')
console.log(obj.foo); // get  123

obj.foo = '223' // set
console.log(obj.foo);  // get 223

你可能感兴趣的:(javascript,前端,开发语言)