Proxy  JS标准内置对象

const p = new Proxy(target, handler)

创建一个对象的代理:

let obj = {
a: {
b: {
c: 1
}
}
}
let proxy = new Proxy(obj, {})
console.log(proxy);

浏览器打印

Object.defineProperty()

直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

Object.defineProperty(obj, prop, descriptor)

重写一个对象:

const object1 = {};

        function df(o) {
Object.keys(o).forEach(key => {
Object.defineProperty(object1, key, {
set() {
object1[key] = obj[key];
if (typeof obj[key] === 'object') {
df(obj[key])
}
}
})
})
return o
}
let proxy1 = df(obj)
console.log(proxy1)

浏览器打印:

使用Object.defineProperty() 重写目标对象需先知道属性(prop),所以在VUE项目中,初始化后,给对象新增属性无法实现响应性。

Proxy代理只需要知道对象本身即可。对代理对象的操作会转发到源对象。

defineProperty和Proxy的更多相关文章

  1. 关于简单的数据双向绑定原理,defineProperty 和Proxy演示

    双向绑定,也就是说js中的数据传到页面,页面中的内容到js,实现同步更新,简单的演示可以直接复制下放HTML代码运行. 在这个例子中,我们使用defineProperty ,Object.define ...

  2. defineProperty 和Proxy双向绑定演示,你还不知道么?

    双向绑定,也就是说js中的数据传到页面,页面中的内容到js,实现同步更新,简单的演示可以直接复制下放HTML代码运行. 在这个例子中,我们使用defineProperty ,Object.define ...

  3. Object.defineProperty和proxy

    Object.defineProperty问题 Object.defineProperty() 无法监控到数组下标的变化.vue只能通过以下几种方法来监听 pop() shift() unshift( ...

  4. ES6 系列之 defineProperty 与 proxy

    ,, ; ; ; } ; }); }; ; }); } });

  5. 【读书笔记】【深入理解ES6】#12-代理(Proxy)和反射(Reflection)API

    代理(Proxy)是一种可以拦截并改变底层JavaScript引擎操作的包装器,在新语言中通过它暴露内部运作的对象,从而让开发者可以创建内建的对象. 数组问题 在ECMAScript6出现之前,开发者 ...

  6. 深入理解 Object.defineProperty 及实现数据双向绑定

    Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作.何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外 ...

  7. Vue 的响应式原理中 Object.defineProperty 有什么缺陷?

    Object.defineProperty只能劫持对象的属性,从而需要对每个对象,每个属性进行遍历,如果,属性值是对象,还需要深度遍历.Proxy可以劫持整个对象,并返回一个新的对象. Proxy不仅 ...

  8. vue2.x版本中Object.defineProperty对象属性监听和关联

    前言 在vue2.x版本官方文档中 深入响应式原理 https://cn.vuejs.org/v2/guide/reactivity.html一文的解释当中,Object.defineProperty ...

  9. 高性能迷你React框架anu在低版本IE的实践

    理想是丰满的,现实是骨感的,react早期的版本虽然号称支持IE8,但是页面总会不自觉切换到奇异模式下,导致报错.因此必须让react连IE6,7都支持,这才是最安全.但React本身并不支持IE6, ...

  10. vue 笔记备份

    Vue实现数据双向绑定的原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty() ...

随机推荐

  1. try...catch中finally子句的使用

    目录: finally的使用 finally面试题 final.finally.finalize的区别 finally子句的使用: 1.在finally子句中的代码是最后且一定会执行的,即使try语句 ...

  2. Mybatis Plus 框架项目落地实践总结

    在使用了Mybatis Plus框架进行项目重构之后,关于如何更好的利用Mybatis plus.在此做一些总结供大家参考. 主要总结了以下这几个方面的实践. 基础设计 BaseEntity 逻辑删除 ...

  3. 新一代自动化利器-DrissionPage

    熟悉的小伙伴知道我的工作有相当一部分是自动化,在探索相关的技术上一直没停下脚步,我痛恨selenium.playwright的非标准内核机制,也曾对clicknium引进了新的问题无语,以及接口爬取数 ...

  4. 理解JS函数之call,apply,bind

    前言 在 JavaScript 中,apply.bind 和 call 是三个重要的函数,它们都是 Function.prototype 的方法.这些函数可以让我们动态地改变函数的 this 值,或者 ...

  5. 使用 UnoCSS shortcuts 简化 class

    UnoCSS 确实简化了不少样式书写.也降低了 CSS 打包体积,提升了样式使用率.但样式太多的话,class 也写得多,比较费眼.所幸,UnoCSS 提供了 shortcuts 来简化 class, ...

  6. 配置 Vite 自动导入 ElementPlus 组件、函数、Icons、样式

    使用 Vite 的自动导入的前提是项目是 TS 项目,JS 项目使用 Vite 自动导入不生效.安装以下 5 个包到 devDependencies: cnpm i -D unplugin-icons ...

  7. Postgresql架构体系解析

    一.PostgreSQL物理架构 postgresql的物理架构非常简单,它由共享内存.一系列后台进程和数据文件组成. 二.Shared Memory 共享内存是服务器服务器为数据库缓存和事务日志缓存 ...

  8. linux系统下,添加硬盘并挂载到操作系统的shell 脚本范例

    #!/bin/sh #新添加硬盘挂载到操作系统 pvcreate /dev/sdb   / / 一般新添加硬盘都是识别为sdb,当然,也不一定,要具体情况具体分析. vgcreate datavg / ...

  9. 副三角形行列式转成上(下)三角形行列式为什么依次对换而不用第n行直接对换首行,第n-1行直接对换次行

    副三角形行列式转成上(下)三角形行列式为什么依次对换而不用第n行直接对换首行,第n-1行直接对换次行 前言:重在记录,可能出错. 1. 简而言之,可以用第n行直接对换首行,第n-1行直接对换次行,直到 ...

  10. C语言实现链表的创建与遍历

    1 #include <stdio.h> 2 #include <stdlib.h> 3 4 5 typedef struct Node{ 6 int data; 7 stru ...