数据劫持基础

news2024/11/16 23:56:44

数据劫持

  • 数据劫持原理。
    • 属性描述符
    • Object.defineProperty
    • 官网响应式原理![在这里插入图片描述](https://img-blog.csdnimg.cn/b9f900484f314334a0dc6139428b397c.png)
    • getter和setter
    • Object.defineProperty的不足
    • proxy
    • 工作原理
    • 总结

数据劫持原理。

数据劫持,指的是在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果。

属性描述符

图片:在这里插入图片描述
图中的a并没有被删除掉

居中的图片: 在这里插入图片描述
Object.getOwnPropertyDescriptor(obj, prop)方法返回指定对象上一个自有属性对应的属性描述符,comfigurable代表可操作的,enumerable代表可遍历的,writable代表可改写的;

属性描述符有两种主要形式:数据描述符和存取描述符。

数据描述符是一个具有值的属性,该值可以是可写的,也可以是不可写的。有configurable、enumerable、value、writable四个配置属性。

存取描述符是由 getter 函数和 setter 函数所描述的属性。有configurable、enumerable、get、set四个配置属性。一个描述符只能是这两者其中之一;不能同时是两者。

Object.defineProperty

Object.defineProperty(obj, prop, descriptor)

obj:必需。目标对象

prop:必需。需定义或修改的属性的名字

descriptor:必需。目标属性所拥有的特性

官网响应式原理在这里插入图片描述

每个组件实例都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染。

getter和setter

在这里插入图片描述在这里插入图片描述
注意:
getter: 当访问该属性时,该方法会被执行,函数的返回值会作为该属性的值返回;

setter: 当属性值修改时,该方法会被执行,该方法将接受唯一的参数,即该属性的新参数值;

不要在getter中再次获取该属性值,也不要在setter中再次设置该属性,会发生无限递归,会栈溢出

只定义getter函数:严格模式下会报错(use strict)

只定义setter函数:获取属性值为undefined;(取的是getter return的返回值)

Object.defineProperty的不足

当使用Object.defineProperty监听的对象属性是数组时,使用push、unshift、pop、shift、splice, ‘sort’, reverse是监听是触发不了set的。只要不是重新赋值一个新的数组对象,任何对数组内部的修改都不会触发set方法的执行。

不能监听属性新增和删除操作,由于js的动态性,可以为对象追加新的属性或者删除其中某个属性,这点对经过Object.defineProperty方法建立的响应式对象来说,只能追踪对象已有数据是否被修改,无法追踪新增属性和删除属性。
在这里插入图片描述
在这里插入图片描述

proxy

可以对目标对象的读取、函数调用等操作进行拦截,然后进行操作处理。它不直接操作对象,而是像代理模式,通过对象的代理对象进行操作,在进行这些操作时,可以添加一些需要的额外操作。

let proxy = new Proxy(target, handler);

target:为所要代理的目标对象(target 为一个对象)

handler :对代理对象的拦截时进行的操作

工作原理

在这里插入图片描述
在这里插入图片描述

总结

1.Proxy性能优于Object.defineProperty。 Proxy代理的是整个对象Object.defineProperty只代理对象上的某个属性,如果是多层嵌套的数据需要循环递归绑定;

2.对象上定义新属性时,Proxy可以监听到,Object.defineProperty监听不到,需要借助$set方法;

3.数组的某些方法(push、unshift和splice)Object.defineProperty监听不到,Proxy可以监听到;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Find My资讯|苹果 Find My 找到因交通事故坠崖的一名女子

美国加州圣贝纳迪诺县消防局在其官方 Facebook 更新动态,表示在接到家属报警,通过苹果 Find My 功能追踪家人的 iPhone,成功营救出在圣贝纳迪诺山区的 18 号高速公路上坠崖的一名妇女。 圣贝纳迪诺县消防局在帖子中表示这名妇女在圣诞节那天…

多线程与高并发(三)

【 day3课前复习 】: 【AtomicInteger】: 原子性——都是用CAS机制来实现。 【 expected , update 】: //有时候也会写三个值——你要修改的那个对象。 expected——期望值。(旧值) update——更新值。(新值&#…

LeetCode刷题复盘笔记—一文搞懂动态规划之剑指 Offer 46. 把数字翻译成字符串问题(动态规划系列第三十四篇)

今日主要总结一下动态规划的一道题目,剑指 Offer 46. 把数字翻译成字符串 题目:剑指 Offer 46. 把数字翻译成字符串 Leetcode题目地址 题目描述: 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” &am…

小型云台机械手的制作

1. 运动功能说明 小型云台机械手,下方的云台可以提供左右旋转和上下摆动的动作,与舵机夹爪配合可以完成简单的抓取和搬运。 2.结构说明 该样机由一个 R207小型舵机云台 上串联了一个 舵机夹爪模组 构成。 3. 运动功能实现 3.1 电子硬件 在这个示例中&a…

Redis集群系列五 —— 分区/片概念

什么是分区 分区就是将所存储的数据按照一定的规则存储在不同的存储服务或介质上,通过降低单服务或介质的数据量级来提升数据处理能力,从而达到拥有数据处理横向扩容的能力的目的。 还可简单的理解为分区就是将数据拆分到多个 Redis 实例的过程&#xf…

21. 合并两个有序链表播报文章

题目描述 这是一道难度为简单的题目,同时,这道题也是Leetcode148题中,链表归并排序中重要的组成部分。 题目描述 题目分析 本题的题目简单易懂,输入为两个有序链表,要求将链表合并为一个有序的链表。在此不在再赘述…

【消息中间件】RocketMQ如何实现Producer的负载均衡

目录 一、前言 二、实现Producer的负载均衡 1、负载均衡选取一条消息队列并且高可用 1.1、模拟随机递增取模消息队列数为5 1.2、模拟随机递增取模消息队列数为6 1.3、判断Broker代理是否可用 2、更新故障项维护startTimestamp字段 2.1、退避运算 2.2、更新故障项维护st…

干货 | 数字经济创新创业——数字经济下的商业模式与解决方案

下文整理自清华大学大数据能力提升项目能力提升模块课程“Innovation & Entrepreneurship for Digital Economy”(数字经济创新创业课程)的精彩内容。主讲嘉宾:Kris Singh: CEO at SRII, Palo Alto, CaliforniaVisiting Professor of Tsinghua Unive…

卷积、转置卷积、膨胀卷积学习记录

Conv计算: 计算公示 1、pytorch中默认参数,以conv1d为例 torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_mode‘zeros’, deviceNone, dtypeNone) 2、输出卷积尺寸&am…

MySQL常见内置函数及其使用

目录 1、聚合函数 2、日期函数 3、字符串函数 4、数学函数 5、其它函数 1、聚合函数 函数说明 COUNT([DISTINCT] expr) 返回查询到的数据的 数量SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义AVG([DISTINCT] expr)返回查询到的数据的 平均值…

数据蛙恢复软件替代产品有哪些?15款顶尖数据恢复软件清单

数据蛙恢复软件是一款国内数据恢复软件,可以在很多品牌的电脑上使用。但是你可能会遇到数据蛙恢复软件扫描不到需要恢复文件的情况。那么有没有更专业的数据恢复软件可以找到更多误删数据?本文将为你介绍最值的推荐的15个数据蛙恢复软件替代产品。 丢失…

Web兼容性测试的要点

对于网页的兼容性我们主要考虑的是各种浏览器对前台页面的兼容性,因为浏览器对页面的影响是最大的。 现在浏览器的种类越来越多,网页中展现出来的内容也越来越丰富,这些内容包括网页中的字体、图片、动画等,而且有些内容需要网页…

AlexNet学习笔记(2)

里面 有些东西 对于现在来说都是错误的 而且由大量的细节对于现在来说没有必要 而且是过度的enginnering 一篇论文的第一段通常是讲一则故事 我们在做什么研究 哪个方向 有什么东西然后为什么很重要 正则化 regularization好像没有那么重要,并不是最关键的 最关键…

前端监控系统的搭建

UI自动化测试库 puppeteer:https://zhuanlan.zhihu.com/p/524254998 - google出品 cypress - 据说比puppeteer好用 前端监控体系 性能监控 异常监控 行为监控:埋点体系 主动监控 被动监控 前端性能数据捕获: 打点方式,结…

pyqt5 QPainter绘制图形,并旋转

PyQt5 的绘图系统使用户可以在屏幕或打印设备上用相同的 API 绘图,QPainter 是用来进行 绘图操作的类,一般的绘图设备包括 QWidget、QPixmap、QImage 等,这些绘图设备为 QPainter 提供了一个“画布” QWidget 类是所有界面组件的基类&#xf…

【细节注入模型】

Detail-Injection-Model-Inspired Deep Fusion Network for Pansharpening (细节注入模型启发的深度融合网络全色锐化算法) 全色锐化是一种图像融合方法,其目的是将低空间分辨率的多光谱(MS)图像与高空间分辨率的全色…

FFmpeg学习笔记--FFplay简单过滤器、FFmpeg命令参数

目录 1--FFplay简单过滤器 2--FFmpeg命令参数 2-1 主要参数 2-1-1 -i设定输入流 2-1-2 -f设定输出格式 2-1-3 -ss设定开始时间 2-1-4 -t设定时间长度 2-1-5 代码实例 2-2 音频参数 2-2-1 -aframes设置输出的音频帧数 2-2-2 -b:a设置音频码率 2-2-3 -ar设置音频采样…

SVG 安全

一 任务目标 本篇文章的目的有:[ ] 了解 SVG 漏洞[ ] 了解 SVG 常见防护手段[ ] 搜寻 SVG 数据安全性校验和过滤的库[ ] 了解如何使用此类库来进行 SVG 上传防护[ ] 阅读源码,能明确讲述此类库做了什么如果对你有所帮助,不妨点赞、评论、收藏…

Windows系统安装Git教程

今天给大家介绍Windows系统安装Git命令。 一、Git版本控制工具简介 git是一个开源的分布式版本控制系统。所谓版本控制系统,是开发者最重要的工具之一,可以有效的解决版本的同步以及不同开发者之家的通信问题,提升协同开发的效率。版本控制…

JAVA数据类型及转换

一、数据类型 数据类型字节数byte字节型占用1个字节取值范围:-27 ~ 27-1-128~127short短整型占用2个字节取值范围:-215 ~ 215-1-32768~32767,在实际开发中使用较少int整型占用4个字节取值范围:-231 ~ 231-1-2147483648-214748364…