数据劫持

简介: 对属性的读取和修改拦截简单来说就是数据的任何变化都要能监测到,这样才能根据数据变化做对应操作

Hello 大家好,我是vike

今天我们一起来看看Vue2中数据劫持的方法

ps:本章脱离vue2单讲数据劫持
  • 什么是数据劫持
  • 对属性的读取和修改拦截
    简单来说就是数据的任何变化都要能监测到,这样才能根据数据变化做对应操作
  • 为什么要用数据劫持
  • Vue2中data里的数据都是响应式数据,数据一经更改,页面上的数据就会进行局部更新
    如果不进行数据劫持,不知道数据状态就无从更新数据
  • Vue2中数据劫持使用了Object.defineProperty方法
  • 使用Object.defineProperty可以给对象定义一个新属性或者修改属性并返回
  • Object.defineProperty新增属性
  • Object.defineProperty(obj,prop,descriptor)
  • 这个方法接收三个参数,obj是要操作的对象,prop是要操作的属性,descriptor是描述符
  • 对象属性新增
let obj = {
        "name":"vike",
        "age":5,
        "sex":"男"
    }
//给obj新增一个hobby属性,值为value,返回新增后的对象
let result = Object.defineProperty(obj,'hobby',{
        value:['code','juejin']
    })
console.log(result,'新增后')

2-1.jpg

  • 对象属性修改
//对象属性修改
    let obj = {
        "name":"vike",
        "age":5,
        "sex":"男"
    }
    //第二个参数为要修改的属性,value为修改属性的值
    let result = Object.defineProperty(obj,'name',{
        value:'123'
    })
    console.log(result)
  • 2-2.jpg
  • Object.defineProperty实现数据劫持
  • 给源数据设置一个代理,源对象每一个属性要写一次Object.defineProperty,
    这边拿name举例
  • Object.defineProperty数据劫持的实现主要依靠属性的两个函数
  • get() 属性的getter函数 访问该属性会自动调用
  • set(newValue) 属性的setter函数 修改该属性会自动调用,该方法接收一个参数,传入赋值时的this
  • 没有get和set的时候默认为undefined
// 实现数据劫持
    // 源数据
    let obj = {
        "name":"vike",
        "age":5,
        "sex":"男"
    }
    //设置一个代理
    let p = {}
    Object.defineProperty(p,'name',{
        // 读取时触发
        get(){
            console.log('有人读取属性')
            return obj.name
        },
        // 修改时触发
        set(newValue){
            console.log('有人修改属性')//此处触发vue2页面更新逻辑
            obj.name = newValue//将新值重新赋给源数据
        }
    })
    console.log(obj,'源数据')
  • 2-3.jpg
  • Object.defineProperty知识拓展
  • descriptor描述符包含两大类 六种
  • 数据描述符
  • configurable
    当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。 默认为false
  • enumerable
    当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。 默认为 false
  • value
    该属性对应的值 默认为 [undefined]
  • writable
    当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被[赋值运算符]改变。 默认为 false
  • 存取描述符
  • get 取值时调用
  • set 修改值时调用
  • 浏览器兼容性
    2-4.jpg
  • 本节知识点分享到这里,下篇我们继续探讨Vue3数据劫持的新方法

\

目录
相关文章
|
1月前
|
域名解析 网络协议 安全
什么是DNS劫持攻击以及如何避免此类攻击
【10月更文挑战第28天】DNS劫持攻击是一种网络攻击方式,攻击者通过篡改用户的DNS设置,将合法网站的域名解析为恶意网站的IP地址,使用户在不知情的情况下访问钓鱼网站。攻击手段包括在用户系统植入恶意软件、利用路由器漏洞或破解DNS通信等。为防止此类攻击,应使用安全软件、定期检查DNS设置、重置路由器密码及避免访问不安全的网站。
123 1
|
2月前
|
网络协议 安全 网络安全
流量劫持常见的攻击场景
流量劫持常见的攻击场景
34 1
|
5月前
|
JavaScript 安全 网络协议
记一次典型的网站劫持
最近接到一个朋友的求助,他的网站被封了,让我帮忙看看。网站是托管在某云平台的,云平台给出的原因是网站涉赌。这就是个最简单网站,几乎全是静态网页,没什么内容,怎么会涉赌呢?难道是云平台搞错了?
43 1
记一次典型的网站劫持
|
7月前
|
监控 安全 网络安全
什么是劫持检查,劫持检测意义是什么
什么是劫持检查,劫持检测意义是什么
|
前端开发 安全 API
深入了解CORS数据劫持漏洞
1.1. CORS介绍 CORS(跨源资源共享)是一种用于在Web应用程序中处理跨域请求的机制。当一个Web应用程序在浏览器中向不同的域(源)发起跨域请求时,浏览器会执行同源策略,限制了跨域请求的默认行为。同源策略要求Web应用程序只能访问与其本身源(协议、域名和端口)相同的资源。 然而,在某些情况下,我们希望允许来自其他源的跨域请求,例如使用AJAX进行跨域数据访问或在前端应用程序中嵌
140 0
|
域名解析 Web App开发 缓存
教懂你什么是 “ 流量劫持 ”
还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群
教懂你什么是 “ 流量劫持 ”
|
SQL API C++
【C/C++教学】劫持?劫持?劫持?!!!(一)
【C/C++教学】劫持?劫持?劫持?!!!
235 0
【C/C++教学】劫持?劫持?劫持?!!!(一)
|
小程序 C++
【C/C++教学】劫持?劫持?劫持?!!!(二)
【C/C++教学】劫持?劫持?劫持?!!!
211 0
【C/C++教学】劫持?劫持?劫持?!!!(二)
|
JavaScript API
数据劫持2
Reflect和Object来说,框架封装更需要健壮性强的Reflect Proxy处理响应式数据更具优势 Object.defineProperty那些缺点在vue框架里也提供了相应的api进行解决
165 0
数据劫持2
|
域名解析 网络协议 安全
流量劫持与防范
流量劫持现象在国内十分猖獗,6家国内顶级互联网公司呼吁有关运营商严格打击流量劫持问题。流量劫持分为域名劫持和内容篡改两类,通过HTTPDNS产品和内容HTTPS加密可以基本解决这两类问题。
560 0