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



相关推荐
deli0077 分钟前
27 寸 4K 开 125% 为什么发虚?PPI 和缩放一次算清
前端
OpenTiny社区13 分钟前
AI Agent场景组件库 TinyRobot v1.0 正式发布:一站式打造您的AI助手
vue.js·github
广州华水科技16 分钟前
当大坝面临风险时,如何有效实施单北斗GNSS变形监测?
前端
学以智用1 小时前
wangEditor V5 精简完整参考手册
javascript
AiMan1 小时前
Poe还是不可以导出左侧所有对话,只能单条内容导出,方法不对吗
前端
用户298698530142 小时前
React 前端实现 Excel 与 CSV 互转:基于 WebAssembly 的浏览器端方案
javascript·react.js·excel
AiMan2 小时前
文心生成的内容能否下载吗?
前端
前端双越老师2 小时前
程序员 1v1 访谈系列第十四期:接受焦虑 拥抱不确定
前端·ai编程·全栈
deli0073 小时前
MCP 协议 6 条消息拆开看:AI 为什么能自己读文件调接口
前端