Object.defineProperty(js的问题)

简介: 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
相关文章
|
4月前
|
JavaScript 前端开发
【面试题】 JS手写ES6的Object.create方法
【面试题】 JS手写ES6的Object.create方法
|
19天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`'1.2,2,3,4,5'`)转换为对象数组。通过使用`split(',')`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
2月前
|
存储 JavaScript
JS中Map对象与object的区别
JS中Map对象与object的区别
|
2月前
|
JavaScript
JS之Object.defineProperty方法
JS之Object.defineProperty方法
|
2月前
|
JavaScript 前端开发 Java
编程笔记 html5&css&js 073 JavaScript Object数据类型
编程笔记 html5&css&js 073 JavaScript Object数据类型
|
4月前
|
JavaScript 前端开发
如何巧妙使用`Object.keys`方法将`JS`的一个对象的特定的值赋值给另外一个对象
如何巧妙使用`Object.keys`方法将`JS`的一个对象的特定的值赋值给另外一个对象
17 0
|
4月前
|
存储 JavaScript 前端开发
【面试题】JS中Map、WeakMap和Object的区别
【面试题】JS中Map、WeakMap和Object的区别
|
5月前
|
JavaScript 前端开发
原生JavaScript JS导出blob后台文件流xlsx、xls文件自动下载(且规避乱码),解决导出Excel文件里面有[object Object]。
原生JavaScript JS导出blob后台文件流xlsx、xls文件自动下载(且规避乱码),解决导出Excel文件里面有[object Object]。
|
5月前
|
JavaScript 前端开发
js基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。具体案例使用演示
js基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。具体案例使用演示
35 1
|
6月前
|
JavaScript
js的Object.assign坑
js的Object.assign坑
29 0