接下来讲一讲Vue的数据代理

首先讲一下原生js的数据代理

原生的 Object.defineProperty()

javascript 复制代码
        
        let aa = 'wewew'
        let person = {
            name: "王李斌",
            age: 12
        }
Object.defineProperty(person, "address", {
            // value: 14, 给字段设置值
            //enumerable:true, 设置动态设置的字段为可以遍历
            //writable:true, 设置动态设置的字段为可以修改
            //configurable:true, 设置动态设置的字段为可以删除
            get() {
                return aa
            }
            set(value){
           aa='wlb'

        }
        })

可以通过这个方法动态的为对象添加字段,并未对象字段设置数据代理

vue中的数据代理

javascript 复制代码
        const x = new Vue({
            el: "#root",
            data: {
                name: "你爸爸",
                age: 14,
                app: "http://baidu.com"
            }
        })

 

这段代码应该见怪不怪了,我们创建vue对象的时候会创建一个data对象传给_data,实际上data和vm中的_data就是完全一样的,我们修改其中一个,另一个的值也会变,其实我们写到这vue也是可以帮我们自动刷新页面修改数据的,看如下代码:

javascript 复制代码
<body>
    <div id="root">
        <h1>hello,{{_data.name}}</h1>
        <h1>年龄,{{_data.age}}</h1>
        <a v-bind:href="app">点我</a>
        <input type="number" v-model="_data.age">
    </div>
    <script>
        Vue.config.productionTip = false

        const x = new Vue({
            el: "#root",
            data: {
                name: "你爸爸",
                age: 14,
                app: "http://baidu.com"
            }
        })
        // x.$mount('#root')
    </script>

</body>

我们都知道在vue的模板中,我们可以直接访问vm对象中的所有参数,那我们可以直接访问vm中的_data来访问具体的参数,当修改data参数时,页面一样会刷新,那么和我们说的数据代理有什么关系的,当然有关系,如果都像{{_data.name}}这么写,岂不是要麻烦死,于是vue就通过 Object.defineProperty()帮我们把data的中的所有参数都在vm对象中重新创建了一份,并且通过它的get方法和set方法,指向了vm对象中的_data中的对应参数,这样我们在写的时候就可以直接写成{{name}},帮我们简化了编写的方式

相关推荐
福兮说9 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理10 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
专业程序开发源10 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
专业程序开发源10 小时前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆66611 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
凤城老人11 小时前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
Dovis(誓平步青云)11 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan11 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_12 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒12 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端