首页 > 其他分享 >VUE框架底层源代码解读------VUE框架

VUE框架底层源代码解读------VUE框架

时间:2023-12-23 15:35:51浏览次数:30  
标签:VUE val 框架 propertyName vm key 源代码 data Options

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <h1>{{name}}</h1>
        <h1>{{age}}</h1>
    </div>
    <script>
        const vm = new Vue({
            // Vue源码中关键性代码
            // var data = vm.$options.data;
            // 此处是获取data,程序执行到此处仍然没有给vm加上_data属性
            // data = vm.data = isFunction(data) ? getData(data,vm) : data
            // 程序执行完这个代码后,VM上多了一个_data的属性
            // 通过以上源码可知,data不一定是一个{}json对象,也可以是一个函数
            // 此处的代码含义是,如果data是函数,则调用getData(data,vm)来获取data
            // 如果不是函数,则直接将data返回,给data变量赋值给vm._data属性
            // 程序执行到这里为什么要给VM拓展一个_data属性
            // 重点函数
            // function isReserved(str)
            // {
            //     var c = (str + '').charCodeAt(0);
            //     return c === 0x24 || c === 0x5f;
            // }
            // 这个函数就是用来判断字符串是否以_或$开始
            // true表示是,false表示否
            // 重点函数
//             function proxy(target, sourceKey, key) {
//       sharedPropertyDefinition.get = function proxyGetter() {
//           return this[sourceKey][key];
//       };
//       sharedPropertyDefinition.set = function proxySetter(val) {
//           this[sourceKey][key] = val;
//       };
//       Object.defineProperty(target, key, sharedPropertyDefinition);
//   }
            el : "#app",
            data : {
                msg : "Hello",
                name : "Jack",
                age : 30
            }
        });
    </script>
</body>
</html>
class Vue
{
    //定义构造函数
    constructor(Options)//一个简单的纯粹的JS对象
    {
        //options对象类有一个data配置项
        Object.keys(Options.data).forEach((propertyName,index) => {
            console.log(propertyName,index);
            let firstCode = propertyName.charAt(0);
            if(firstCode != "$" && firstCode != "_")
            {
                Object.defineProperty(this,propertyName,{
                    get()
                    {
                        return Options.data[propertyName];
                    },
                    set(val)
                    {
                        Options.data[propertyName] = val;
                    }
                });
            }
        });
    }
}

标签:VUE,val,框架,propertyName,vm,key,源代码,data,Options
From: https://blog.51cto.com/u_16322355/8945192

相关文章

  • IIS部署vue项目
    【第一步】安装IIS{1)打开控制面板->打开程序和功能->打开启用或关闭windows功能  (2)找到 InternetInformationServices勾选【web管理工具】和【万维网服务】,然后确定【第二步】安装URL重写模块1).安装URLRewrite,下载地址2).安装ApplicationRequestRouting,下......
  • 基于SpringBoot+Vue的文理医院预约挂号系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • 26.基于 page object 模式的测试框架优化实战
    目录异常处理(弹窗黑名单)日志记录报告生成测试数据的数据驱动异常弹框处理定义黑名单列表处理弹框#声明一个黑名单defblack_wrapper(fun):defrun(*args,**kwargs):basepage=args[0]try:returnfun(*args,**kwargs)......
  • 一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器
    前言经常看到有小伙伴在技术群里问有没有什么好用且快速的开发框架推荐的,今天就给大家分享一款基于MITLicense协议开源、免费的.NETCore快速开发框架、支持多种前端UI、内置代码生成器、一款高效开发的利器:WalkingTec.Mvvm框架(简称WTM)。官方项目介绍WalkingTec.Mvvm框架(简称W......
  • Vue学习计划-Vue2--VueCLi(八)vuex统一状态管理实现数据共享
    1.vuex是什么概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。这个怎么理解呢?可以暂时理解成全局事件总线、消息订阅与发布一样的道理,把vuex当成是外部的一个储存空间,......
  • Python+Selenium框架实战系列003----测试数据分离与ddt技术&断言
    一、测试数据分离1、新建testData文件夹,新建login_data.py文件,如下所示:   2、在login_datas.py文件中存放测试用例数据,如下所示:#正常场景success_data={"mobile":"17839196010","pwd":"duhui94619"}#异常用例--手机号异常phone_data=[{"mobile":&......
  • python自动化学习笔记4-----pytest单元测试框架
            ......
  • [Qt5&布局] 控件自动填满所在布局框架
    作者:丶布布如图,在界面布局时,将几个QT控件进行布局时,默认边缘时有一定间隙的(红框标注),有时为了美观,可以将布局边缘的间隙设置成我们想要的宽度具体设置方法:默认边缘间隙为11,设置为1,看一下效果: 戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。......
  • [Qt5] QGraphics图形视图框架概述(Item、Scene和View)
    作者:丶布布文章预览:......
  • Selenium - 自动化测试框架
    Selenium介绍Selenium是目前用的最广泛的WebUI自动化测试框架,核心功能就是可以在多个浏览器上进行自动化测试,支持多种编程语言,目前已经被google,百度,腾讯等公司广泛使用。开发步骤1、配置google驱动的环境变量,如果不配置需要在代码中指定驱动位置。2、eclipse中导......