学习VUE总得知道Object.defineProxy怎么使用吧

简介: 学习VUE总得知道Object.defineProxy怎么使用吧

学习VUE总得知道Object.defineProxy怎么使用吧

工作归工作,不要觉得会用就完事了,很多时候得多看看基础。今天就专门讲一下Object.defineProxy是如何使用的,这样在以后讲到Vue2.X的源码时,就更容易理解了。

Object.defineProperty()方法可以直接在一个对象上定义一个新属性或者修改它的一个先有属性并返回此对象。

下面先举个例子示意下。

const obj = {};
const obj2 = Object.defineProperty(obj, 'property', {
  value: 42,
  writable: false
});
obj.property = 77;
console.log(obj); // {property: 42}
obj2.test = 3
obj2.property = 78;
console.log(obj) // {test: 3, property: 42}
obj.test = 5
console.log(obj2) //{test: 5, property: 42}

可以看出入参有三个,出参就是原对象(修改后的)

Object.defineProperty(obj, prop, descriptor)

入参中第一个参数,就是要修改的对象,第二个参数是要定义或修改的属性,第三个参数是对应的属性描述符号。前两个比较好理解,重点在于第三个参数。

属性描述符分为两类,一种是数据描述符一种是存取描述符。

数据描述符包含的属性有:configurable、enumerable、value、writable

存取描述符包含的属性有:configurable、enumerable、get、set

一个描述符不可能同时存在 valuewritablegetset

示例:

const obj = {};
const obj2 = Object.defineProperty(obj, 'property', {
 writable: false,
 get() {
  return 1
 }
});
console.log(obj2)

此时浏览器会报错:Invalid property descriptor. Cannot both specify accessors and a value or writable attribute

属性介绍:

  • configurable

    当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。 默认为 false

  • enumerable

    当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。 默认为 false

  • value

    该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。 默认为 undefined

  • writable

    当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符 (en-US)改变。 **默认为 false

  • get 相比直接使用value可以多一些运算在里面 默认值undefined
  • set 相比直接赋值可以多一些函数进行处理 默认值undefined

几个简单示例:

const obj = {};
  const obj2 = Object.defineProperty(obj, 'property', {
   writable: false,
   value: 22
  });
  delete obj2.property
  console.log(obj2)
  //你会发现无法删除该属性
const obj = {};
  const obj2 = Object.defineProperty(obj, 'property', {
   get() {
​    return property
   },
   set(val) {
​    property = val + 1
   }/
   
  });
  obj2.property = 2
  console.log(obj2.property) 
  // 显示3 

这里值得注意的是set和get函数中的属性是如何设置或返回的。

简单用法就是这些,下一篇讲讲VUE是如何把它活用起来的。

相关文章
|
29天前
|
JavaScript 数据可视化
vue-cli学习一:vue脚手架的 vue-cli2和vue-cli3版本 创建vue项目,vue的初始化详解
这篇文章介绍了如何使用vue-cli 2和3版本来创建Vue项目,并详细说明了两者之间的主要区别。
76 5
vue-cli学习一:vue脚手架的 vue-cli2和vue-cli3版本 创建vue项目,vue的初始化详解
|
28天前
|
JavaScript
VUE学习二:事件监听(v-on)、条件判断(v-if/v-else-if/v-else)、循环遍历(v-for)
这篇文章是关于Vue.js的学习指南,涵盖了事件监听、条件判断、循环遍历、数组方法响应性、案例分析以及高阶函数的使用。
54 2
VUE学习二:事件监听(v-on)、条件判断(v-if/v-else-if/v-else)、循环遍历(v-for)
|
11天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
29天前
|
JavaScript 数据可视化
vue-cli学习二:vue-cli3版本 创建vue项目后,Runtime-Compiler和Runtime-only两个模式详解;vue项目管理器;配置文件的配置在哪,以及如何配置
这篇文章详细介绍了Vue CLI 3版本创建项目时的Runtime-Compiler和Runtime-only两种模式的区别、Vue程序的运行过程、render函数的使用、eslint的关闭方法,以及Vue CLI 2和3版本配置文件的不同和脚手架3版本创建项目的配置文件配置方法。
31 3
vue-cli学习二:vue-cli3版本 创建vue项目后,Runtime-Compiler和Runtime-only两个模式详解;vue项目管理器;配置文件的配置在哪,以及如何配置
|
2月前
|
JavaScript 前端开发
vue学习(15)watch和computed
vue学习(15)watch和computed
129 58
|
23天前
|
JavaScript
《进阶篇第9章》学习vuex知识点后练习:求和案例_纯vue版代码
《进阶篇第9章》学习vuex知识点后练习:求和案例_纯vue版代码
12 1
|
30天前
|
JavaScript
Vue 的响应式原理中 Object.defineProperty 有什么缺陷
Vue 的响应式原理主要依赖于 `Object.defineProperty`,但该方法存在一些缺陷:无法检测到对象属性的添加和删除,且对大量数据进行代理时性能较差。Vue 3 中改用了 Proxy 来解决这些问题。
|
28天前
|
JavaScript 前端开发
VUE学习三:双向绑定指令(v-mode)、组件化开发(全局组件/局部组卷/组件通信)、组件化高级(slot插槽使用)
这篇文章是关于Vue.js框架中的v-model指令和组件化开发的详细教程,涵盖了从基础使用到高级功能的多个方面。
29 1
|
28天前
|
JavaScript 前端开发 开发者
VUE学习一:初识VUE、指令、动态绑定、计算属性
这篇文章主要介绍了Vue.js的基础知识,包括初识Vue、指令如v-for、v-on的使用、动态属性绑定(v-bind)、计算属性等概念与实践示例。
57 1
|
1月前
|
存储 JSON JavaScript
Vue基本学习
Vue基本学习
12 0
下一篇
无影云桌面