数据劫持

数据劫持

set get
  • get 是一种获得属性值的方法,
    setter是一种设置属性值的方法

  • get 负责查询值,它不带任何参数
    set 则负责设置键值,值是以参数的形式传递

 let obj = {
//             name:"小涛",
//             age:"22"
//         }
// // 需要在获取的对象属性的同时, 做一些其他的事情
//         console.log(obj.name);

//   //需要设置对象的属性的时候,做一些其他的事情      
//         obj.name = "大涛";
//         obj.age = "越来越大";
    let obj = {
        $ name : "爱哭的",
        get name(){
            console.log("啊~ 我被获取到了");
            return this.$name;
        },
        set name (newVal){
            console.log("我是新的数据" + newVal);
            this. $ name = newVal;
        }
    }
    console.log(obj.name);
    console.log(obj);
    obj.name = "爱笑的";
    console.log(obj.name);
defineProperty

Object.defineProperty(obj, prop, descriptor)

let obj = {
name : “の”,
age:“18”
}
obj : 指定的操作对象
“name” : 指定对象的指定属性(这里可以是已有的属性值。也可以是新来的,用做添加新属性)
{} : 对指定属性的 相关设置

Object.defineProperty(obj,“name”,{

//1. // 配置是否允许被删除 true(默认值)可以被删除 , false不能被删除
configurable: true,

//2. 配置是否允许被枚举, true(默认值) 允许, false 不允许
// 是否允许被枚举 === 是否允许被遍历访问

enumerable: true,

//3. 配置是否允许被修改,true(默认值) 允许, false 不允许
// 默认值为 true,没有业务需要,不需要设置
// 对 set方法: 默认值 true 时, 没有影响
// 设置为 true 时, 发生冲突
// writable: true,

//4. value: 用于对指定属性的 赋值, 获取值 , 默认值 为undefind

set(newVal){
console.log(“这是想要设置的新值”+newVal);
value = newVal;
},
get(){
console.log(“我被触发了”);
return value;
}
});

基于数据劫持的数据响应式

“响应式”,是指当数据改变后,会通知到使用该数据的代码。例如,视图渲染中使用了数据,数据改变后,视图也会自动更新。

  • compileNode 编译方法
    • 正则:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
  • dataProxy 添加观察
  • defineData 劫持数据
    • 自定义事件
    • new Event 自定义事件
    • dispatchEvent 事件派发

数据响应式实现原理:

  1. 利用数据劫持 (defineProperty, Proxy) 监听对应数据的修改设置
  2. 利用观察者模式(或事件机制),给每一项数据添加相应的事件监听,当数据修改时触发该事件,然后驱动视图进行修改

双向绑定:

  1. 利用数据响应式,完成数据对视图修改
  2. 添加 change 或 input 等事件,监听视图的修改,当视图改变时修改数据

mvc

mvc 模式。 之前的市面是很常见很流行的一个概念,一个编程规范。

// mvvm: model(模型-数据) + view(视图) + viewModel(视图模型)

遵循的基本原则: 数据驱动视图的方式

mvvm 的本质上, 就是mvc的改进版,mvvm 就是将其中的 view的状态和行为 抽象化
ViewModel 的任务 : 让我们将视图和数据区分开,并通过vm来建立连接
它可以取出 m 中的数据,同时帮忙处理view中需要展示的内容所需的业务逻辑

数据响应式: 是指当数据改变后,会通知到使用该数据的代码,
例如: 视图渲染中依赖的数据,数据发生改变的时候,视图也自动更新

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值