 数据代理
数据代理
 
  文章发布较早,内容可能过时,阅读注意甄别。
# 回顾 Object.defineproperty 方法
# 代码
 <!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>回顾Object.defineproperty方法</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <script type="text/javascript">
      let num = 18;
      let person = {
        name: "张三",
        sex: "男",
      };
      Object.defineProperty(person, "age", {
        // value: 18,
        // enumerable: true, // 控制属性是否可以枚举,默认值是false
        // writable: true, // 控制属性是否可以被修改,默认值是false
        // configurable: true, // 控制属性是否可以被删除,默认值是false
        // 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
        get() {
          console.log("有人读取age属性了");
          return num;
        },
        // 当有人修改person的age属性时,set函数(setter)就会被调用,且会受到修改的具体值
        set(value) {
          console.log("有人修改了age属性,值为:", value);
          num = value;
        },
      });
      console.log(person);
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 数据代理
# 代码
 <!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>数据代理</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <script type="text/javascript">
      // 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)
      let obj = { x: 100 };
      let obj2 = { y: 200 };
      Object.defineProperty(obj2, "x", {
        get() {
          return obj.x;
        },
        set(value) {
          obj.x = value;
        },
      });
      console.log(person);
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Vue 中的数据代理
# 代码
 <!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Vue中的数据代理</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 准备好一个容器-->
    <div id="root">
      <h2>学校名称:{{name}}</h2>
      <h2>学校地址:{{address}}</h2>
    </div>
  </body>
  <script type="text/javascript">
    Vue.config.productionTip = false; //阻止 vue 在启动时生成生产提示。
    const vm = new Vue({
      el: "#root",
      data: {
        name: "尚硅谷",
        address: "宏福科技园",
      },
    });
  </script>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 笔记
 - Vue 中的数据代理:通过 vm 对象来代理 data 对象中属性的操作(读/写)
- Vue 中数据代理的好处:更加方便的操作 data 中的数据
- 基本原理:
- 通过 Object.defineProperty()把data 对象中所有属性添加到vm上。
- 为每一个添加到 vm 上的属性,都指定一个 getter/setter。
- 在 getter/setter内部去操作(读/写)data 中对应的属性。
 
           
      上次更新: 2024/06/13, 22:13:45
 
  |
 |