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



相关推荐
北辰alk2 分钟前
Vue项目Axios封装全攻略:从零到一打造优雅的HTTP请求层
vue.js
_杨瀚博4 分钟前
微信支付集成_JSAPI
前端
polaris_tl4 分钟前
react beginwork
前端
亮子AI15 分钟前
【css】列表的标号怎么实现居中对齐?
前端·css
梦想的旅途239 分钟前
媒体文件(图片/文件)的上传与管理:获取 Media ID 的技术细节
前端·http·servlet
一水鉴天1 小时前
整体设计 定稿 之22 dashboard.html 增加三层次动态记录体系仪表盘 之1
前端·html
老华带你飞1 小时前
出行旅游安排|基于springboot出行旅游安排系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring·旅游
张拭心1 小时前
程序员越想创业,越不要急着动手
前端·人工智能
舒一笑1 小时前
在低配云服务器上实现自动化部署:Drone CI + Gitee Webhook 的轻量级实践
前端·后端·程序员
龙国浪子1 小时前
从零到一:打造专业级小说地图设计工具的技术实践
前端·electron