Vue-7、Vue中数据代理

1、回顾Object.defineProperty

javascript 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>数据代理,回顾 Object.defineProperty</title>
</head>
<body>
<script type="text/javascript">
    let person = {
        name:'张三',
        sex:'男',
        age:18
    };
    console.log(Object.keys(person));
    for (let key in person){
        console.log('@',person[key])
    }
    console.log(person);
</script>
</body>
</html>

Object.defineProperty所增加的属性

javascript 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>数据代理,回顾 Object.defineProperty</title>
</head>
<body>
<script type="text/javascript">
    let person = {
        name:'张三',
        sex:'男',
        //age:18
    };
    Object.defineProperty(person,'age',{
        value:18
    });
    console.log(Object.keys(person));
    
    for (let key in person){
        console.log('@',person[key])
    }
    console.log(person);
</script>
</body>
</html>

enumerable :true 控制属性是否可以枚举,默认值是false

javascript 复制代码
	Object.defineProperty(person,'age',{
        value:18,
        enumerable:true,//控制属性是否可以枚举,默认值是false
    });

writable:true, 控制属性是否可以修改。默认值是false

javascript 复制代码
 Object.defineProperty(person,'age',{
        value:18,
        enumerable:true,//控制属性是否可以枚举,默认值是false
        writable:true, // 控制属性是否可以修改。默认值是false
    });

configurable:true,//控制属性是否可以被删除 ,默认是false

javascript 复制代码
Object.defineProperty(person,'age',{
        value:18,
        enumerable:true,//控制属性是否可以枚举,默认值是false
        writable:true, // 控制属性是否可以修改。默认值是false
        configurable:true,//控制属性是否可以被删除 ,默认是false
    });

getter 函数使用

javascript 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>数据代理,回顾 Object.defineProperty</title>
</head>
<body>
<script type="text/javascript">
    let number = 18;
    let person = {
        name:'张三',
        sex:'男',
    };
    Object.defineProperty(person,'age',{
        //当有人读取person的age属性是,get函数(getter)就会被调用,且返回值就是age的值
        get:function () {
            return number
        }

    });
    console.log(Object.keys(person));
    for (let key in person){
        console.log('@',person[key])
    }
    console.log(person);
</script>
</body>
</html>

简写形式

javascript 复制代码
 Object.defineProperty(person,'age',{
        //当有人读取person的age属性是,get函数(getter)就会被调用,且返回值就是age的值
        get() {
            return number
        }

    });

setter 函数使用

javascript 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>数据代理,回顾 Object.defineProperty</title>
</head>
<body>
<script type="text/javascript">
    let number = 18;
    let person = {
        name:'张三',
        sex:'男',
    };
    Object.defineProperty(person,'age',{
        //当有人读取person的age属性是,get函数(getter)就会被调用,且返回值就是age的值
        get() {
            console.log('有人读取age属性了');
            return number
        },
        //当有人修改person的age属性时。set(setter)就会被调用  且会收到修改的具体值
        set:function(value){
            console.log('有人修改了age的值,且值是',value);
            number = value;
        }
    });
    console.log(Object.keys(person));
    for (let key in person){
        console.log('@',person[key])
    }
    console.log(person);
</script>
</body>
</html>

2、vue中的数据代理

数据代理:通过一个对象代理对另外一个对象属性操作(读/写)

vm._data=options.data=data



相关推荐
那就可爱多一点点8 分钟前
超高清大图渲染性能优化实战:从页面卡死到流畅加载
前端·javascript·性能优化
不能只会打代码1 小时前
六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战
前端·html·html5
OpenTiny社区1 小时前
Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
前端·node.js
菲力蒲LY2 小时前
输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路
java·前端·mybatis
飞天大河豚3 小时前
2025前端框架最新组件解析与实战技巧:Vue与React的革新之路
vue.js·react.js·前端框架
MickeyCV3 小时前
Nginx学习笔记:常用命令&端口占用报错解决&Nginx核心配置文件解读
前端·nginx
祈澈菇凉3 小时前
webpack和grunt以及gulp有什么不同?
前端·webpack·gulp
十步杀一人_千里不留行3 小时前
React Native 下拉选择组件首次点击失效问题的深入分析与解决
javascript·react native·react.js
zy0101013 小时前
HTML列表,表格和表单
前端·html
初辰ge3 小时前
【p-camera-h5】 一款开箱即用的H5相机插件,支持拍照、录像、动态水印与样式高度定制化。
前端·相机