从0到1学习Vue框架Day03

6、VM的属性

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>vm的属性</title>
   <script src="../js/vue.js"></script>
</head>
<body>
   <!-- 
      通过Vue实例都可以访问哪些属性?
         Vue实例中的属性很多,有的以$开始,有的以_开始
         所有以$开始的属性,可以看做是公开的属性,这些属性是供程序员使用的。
         所有以_开始的属性,可以看做是私有的属性,这些属性是Vue框架底层使用的。
         通过vm也可以访问Vue实例对象的原型对象上的属性
   -->

   <div id="app">
      <h1>{{msg}}</h1>
   </div>

   <script>
      let dataObj = {
         msg : 'Heool Vue'
      }
      const vm = new Vue({
         el : '#app',
         data : dataObj
      })

      console.log(dataObj.msg);
      console.log(vm.msg);
   </script>
   
</body>
</html>

7、Object.defineProerty()

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Object.defineProerty()</title>
   <script src="../js/vue.js"></script>
</head>
<body>
   <!-- 
      Object.defineProerty()
      1、这个方法是ES5新增的
      2、作用:给对象新增属性,或者设置对象原有的属性。
      3、object.defineProperty(给哪个对象新增属性, '新增的属性名',{给新增属性设置相关的配置项key:value})
      4、第三个参数是属性相关的配置项,配置项都有哪些?每个配置项的作用是啥?
         value配置项:给属性指定值
         writable配置项:设置该属性的值师范可以被修改
         getter方法 配置项:不需要我们手动调用,当读取属性值的时候,getter方法被自动调用
            getter方法的返回值非常重要,这个返回值就代表这个属性它的值
         setter方法 配置项:不需要我们手动调用的。当修改属性值的时候,setter方法被自动调用
            setter方法上是有一个参数的,这个参数可以接收传过来的值
         注意:当配置项当中有setter和getter的时候,value和writable配置项都不能存在
   -->
   <script>

      let phone = {}
      let temp

      Object.defineProperty(phone, 'color', {
         //value : '灰色',
         //writable : true
         get : function(){
            console.log('getter执行了');
            //return this.color
            return temp
         },
         set : function(val){
            console.log('setter执行了');
            //this.color = val
            temp = val
         }
      })

   </script>



</body>
</html>

8、数据代理机制的实现

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>数据代理机制的实现</title>

</head>
<body>
   <!-- 
      1、什么是数据代理机制?
         通过访问 代理对象的属性 来间接访问 目标对象的属性
         数据代理机制的实现需要依靠:Object.defineProperty()方法
      2、ES6新特性:
         在对象中的函数/方法:function是可以省略的
   -->

   <script>
      let target = {
         name : 'zhangsan'
      }
      let proxy = {}

      Object.defineProperty(proxy,'name',{
         get(){
            return target.name
         },
         set(val){
            target.name = val
         }
      })
   </script>
</body>
</html>

9、数据代理对属性名的要求

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>数据代理对属性名的要求</title>
   <script src="../js/vue.js"></script>
</head>
<body>
   <!-- 
      1、Vue实例不会给以_和$开始的属性名做数据代理
      2、为什么?
         如果允许给_或$开始的属性名做数据代理的话
         vm这个Vue实例上可能会出现_xxx或$xxx属性
         而这个属性名可能会和Vue框架自身的属性名冲突
      3、在Vue当中,给data对象的属性名命名的时候,不能以_或$开始
   -->

   <div id="app">
      <h1>{{msg}}</h1>
   </div>

   <script>
      const vm = new Vue({
         el : '#app',
         data : {
            msg : 'bjpowernode',
            $name : 'zhangsan',
            _age : 20
         }
      })
   </script>
</body>
</html>

10、手写Vue框架数据代理的实现

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>数据代理对属性名的要求</title>
   <script src="../js/vue.js"></script>
</head>
<body>
   <!-- 
      1、Vue实例不会给以_和$开始的属性名做数据代理
      2、为什么?
         如果允许给_或$开始的属性名做数据代理的话
         vm这个Vue实例上可能会出现_xxx或$xxx属性
         而这个属性名可能会和Vue框架自身的属性名冲突
      3、在Vue当中,给data对象的属性名命名的时候,不能以_或$开始
   -->

   <div id="app">
      <h1>{{msg}}</h1>
   </div>

   <script>
      const vm = new Vue({
         el : '#app',
         data : {
            msg : 'bjpowernode',
            $name : 'zhangsan',
            _age : 20
         }
      })
   </script>
</body>
</html>
相关推荐
葡萄城技术团队8 小时前
1000 人协同压测的环境瓶颈排查:CPU 争用与 Wi\-Fi
前端
Java后端的Ai之路8 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
excel9 小时前
Marked 与 Markdown 有什么区别?该怎么选?
前端
Da Da 泓10 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
zxcvb15311 小时前
远程查看本地文档:一条轻量 Web 文件服务的工程化链路
前端·远程查看文档
niucloud-admin11 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
程序员大阳11 小时前
副队长JavaScript教程(50)-DOM:网页开发的起点
javascript·dom·es·节点·概念·document·关系
北岛贰11 小时前
啵啵音乐迎来全新升级!
前端
apple-mapping11 小时前
网络RTK定位学习总结
学习·网络rtk
楚山之石12 小时前
【Lancet Neurology 】多发性硬化认知障碍的 SDMT 筛查、灰质萎缩标志与认知康复循证路径
图像处理·人工智能·学习·mri