0
点赞
收藏
分享

微信扫一扫

【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理


和阿牛一起冲Vue

文章目录

  • ​​和阿牛一起冲Vue​​
  • ​​前言​​
  • ​​一、MVVM模型​​
  • ​​1、MVVM模型是什么?​​
  • ​​2、观察发现​​
  • ​​3、代码示例​​
  • ​​二、属性操作Object.defineProperty​​
  • ​​什么是Object.defineProperty方法?​​
  • ​​如何使用这个方法​​
  • ​​传三个参数:​​
  • ​​pink色的意义​​
  • ​​代码示例​​
  • ​​数据代理​​
  • ​​Vue中的数据代理​​
  • ​​三个连等关系​​
  • ​​总结​​
  • ​​Vue中的数据代理:​​
  • ​​Vue中数据代理的好处:​​
  • ​​基本原理:​​


前言

青春,因为奋斗与奉献更美丽。

一、MVVM模型

1、MVVM模型是什么?


1. M:模型(Model) :data中的数据

2. V:视图(View) :模板代码

3. VM:视图模型(ViewModel):Vue实例


2、观察发现


注意:

1.data中所有的属性,最后都出现在了vm身上。

2.vm身上所有的属性 及 Vue原型上所有属性,在Vue模板中都可以直接使用。

3、代码示例

<h1>学校名称:{{name}}</h1>
<h1>学校地址:{{address}}</h1>
<h1>测试一下1:{{1+1}}</h1>
<h1>测试一下2:{{$options}}</h1>
<h1>测试一下3:{{$emit}}</h1>
<h1>测试一下4:{{_c}}</h1>

【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_前端

二、属性操作Object.defineProperty

什么是Object.defineProperty方法?

是给一个对象添加属性或者修改属性

如何使用这个方法

传三个参数:

  • 一是给哪个对象传递属性,
  • 二是添加的属性叫什么名字,
  • 第三个是配置项

let person = {
name: "张三",
sex: '男'
}
Object.defineProperty(person, 'age', {
value: '18',
})
console.log(person);

【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_javascript_02

pink色的意义

  • 不能被枚举等,例如通过​​console.log(Object.keys(person));​​通过数组形式输出对象属性值
  • 【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_前端_03

  • 或者通过​​forin​​循环属性
  • 【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_代码示例_04

  • get方法获取年龄
  • 【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_javascript_05

  • set方法
  • 【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_前端_06

代码示例

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>

<body>
<div id="root">
<h1></h1>
</div>
</body>
<script src='vue.js'></script>
<script>
Vue.config.productionTip = false;
let number = 18;
let person = {
name: "张三",
sex: '男'
}
Object.defineProperty(person, 'age', {
// value: "13",
// enumerable: true,//控制属性书否可以枚举
// writable: true,//控制属性是否可以修改
// configurable: true,//控制属性是否可以被删除
// 当有人读取person的age属性时,get函数就会被调用,且返回的值是age某项需要值
get: function () {
return number;
},
//
set(value) {
console.log('有人修改了age属性值,改为', value);
number = value;

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

</html>

数据代理

也就是通过一个对象代理另一个对象中的属性的操作(读/写);
代码示例:
简单的效果

Vue.config.productionTip = false;
//数据代理:通过一个对象代理另一个对象中的属性的操作(读/写)

let obj_1 = {
x: 100
}
let obj_2 = {
y: 200
}
Object.defineProperty(obj_2, 'x', {
get() {
return obj_1.x
},
set(value) {
obj_1.x = value
}
})
console.log(obj_1);

Vue中的数据代理

【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_代码示例_07

const vm = new Vue({
el: '#root',
data: {
name: 'jack',
message: {
url: 'javascript:void(0)?spm=1000.2115.3001.5343',
name: '勇敢牛牛'
}
}
});

三个连等关系

此中的vm的data属性的方法描述,是三个连等关系(把data定义出去)

【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_vue.js_08


【Vue】基础系列(四)MVVM模型-属性操作Object.defineProperty-数据代理_前端_09

总结

Vue中的数据代理:

通过vm对象来代理data对象中属性的操作(读/写)

Vue中数据代理的好处:

更加方便的操作data中的数据

基本原理:

通过Object.defineProperty()把data对象中所有属性添加到vm上。
为每一个添加到vm上的属性,都指定一个getter/setter。
在getter/setter内部去操作(读/写)data中对应的属性。


举报

相关推荐

0 条评论