Vue双向数据绑定原理-中

defineProperty方法

defineProperty除了可以动态修改/新增对象的属性以外, 还可以在修改/新增的时候给该属性添加get/set方法, 从而实现数据劫持。

defineProperty get/set方法特点

只要通过defineProperty给某个属性添加了get/set方法,那么以后只要获取这个属性的值就会自动调用get, 设置这个属性的值就会自动调用set。

!> 但是有一个注意点, 如果设置了get/set方法, 那么就不能通过value直接赋值, 也不能编写writable:true。

defineProperty get 方法

<script>
    let obj = {};
    let oldValue = "Example"
    Object.defineProperty(obj, 'name', {
        get() {
            console.log('get方法被执行了');
            return oldValue;
        }
    });

    console.log(obj.name);
</script>

image-20230930202458805

defineProperty set 方法

<script>
    let obj = {};
    let oldValue = "Example"
    Object.defineProperty(obj, 'name', {
        set(newValue) {
            if (oldValue !== newValue) {
                console.log("set方法被执行了");
                oldValue = newValue;
            }
        }
    });
    obj.name = 'BNTang'
</script>

image-20230930202623403

总结

通过上面的例子可以看出, 只要给某个属性添加了get/set方法, 那么以后只要获取这个属性的值就会自动调用get, 设置这个属性的值就会自动调用set。还有就是如果设置了get/set方法, 那么就不能通过value直接赋值, 也不能编写writable:true。

posted @   BNTang  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示