数据劫持--Object.definePropertie

1、什么是Object.definePropertie

Object.defineProperty() 是JavaScript中的一个方法,它用于直接在对象上定义新属性,或者修改一个对象的现有属性,并返回这个对象。

2、Object.defineProperty() 方法接受三个参数:

  1. obj:要定义属性的对象。

  2. prop:要定义或修改的属性的名称或Symbol。

  3. descriptor:将被定义或修改的属性的描述符。

    数据描述符是一个具有值的属性,该值可能是可写的,也可能不是。数据描述符具有以下可选键值:

  • value:该属性的值。默认值为 undefined
  • writable:当且仅当该属性的 value 可以改变时为 true。默认为 false
  • enumerable:当且仅当该属性出现在对象的枚举属性中时为 true。默认为 false
  • configurable:当且仅当该属性的描述符能够被改变以及该属性能够从对应的对象中被删除时为 true。默认为 false
javascript 复制代码
 
function defineProperty() {
    var _obj={};
    var a=1;
    
    Object.defineProperties(_obj,{
        a:{
          get(){
               return  'get' + a ;//var的a
                },
            set(newVal){
                a=newVal
                console.log('set的newVal',newVal)
                }
           }
    })
return _obj
}
var obj = defineProperty();
console.log(obj.a) //走的get方法获取
obj.a=199 // 走的set方法进行修改

数据劫持:把一个对象里的属性进行可配置可写 可枚举,通过get set方法对取值 存取值进行逻辑上的扩展

取一个值的时候 先走get方法 当设置一个值的时候先看set方法的逻辑

vue2采用的就是这种进行响应式处理

相关推荐
heyCHEEMS2 分钟前
切页回来组件消失了?一个浏览器渲染机制引起的容器高度坍塌 bug
前端·浏览器
iaku3 分钟前
Prompt 不是玄学:写给前端的 Prompt 工程指南
前端·人工智能
爱丶不疚3 分钟前
在 dsh 仓库里扒到的宝藏工作流:详解 .agents/notes 决策沉淀系统
前端·agent·vibecoding
喜欢睡觉8 分钟前
从"送花"讲懂 JavaScript:对象、数据类型与代理模式
前端
渣波9 分钟前
NestJS 企业级后端架构实战:从核心代码到工程化思维的深度重构
前端·typescript·nestjs
BreezeJiang9 分钟前
别再背工厂模式了:NestJS 第一行代码就是它的工业级落地
前端·javascript
光影少年9 分钟前
RN 常见性能问题:JS卡顿、UI卡顿、桥接通信耗时
前端·react native·react.js
liuxiaocheng11 分钟前
文本生成的进阶:generateText / streamText 里迟早会撞上的东西
前端·后端·ai编程
渣波18 分钟前
深度解析工厂模式:从蜜雪冰城到 NestFactory,彻底搞懂“创建与使用分离”
前端·javascript
蔓越莓19 分钟前
打包工具:编译器ESBuild
前端·面试