当前位置: 首页 > java >正文

methods的实现原理

一、直观的感受methods的使用

首先直观的感受methods方法的使用,同样以计数器为例,

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script><title>methods的实现原理</title>
</head>
<body><div id="app"><h1>{{msg}}</h1><h1>计数器:{{count}}</h1><button @click="addOne">加一</button></div><script>new Vue({el : "#app",data:{msg: "methods的实现原理",count:0},methods:{addOne(){this.count++}}})</script></body>
</html>

不难看出来,其methods中的方法是用来处理事件执行相应逻辑的代码 。对于上述代码来说,其addOne()方法就是来处理的相应逻辑——实现不断加1的功能。在页面上点击按钮触addOne()方法,它就会执行 this.count++,让 count 增加。

二、🧠 methods 的实现原理是什么?

Vue 实例初始化时到底发生了什么?—— 挂载方法

当我写下如下代码的时候 

new Vue({el : "#app",data:{msg: "回调函数中的this",count:0},methods:{addOne(){this.count++}}
})

Vue 会进行一系列的初始化操作。其中的一部分是初始化 methods —— Vue 会把我们写在methods 中的函数挂载到 Vue 实例(this)上

📦 举个比喻:你写了一堆工具(函数)放在工具箱(methods),Vue 会把它们一一拿出来,贴在你的“Vue 小人”身上(Vue 实例),这样你就能用 this.someMethod() 来调用。

那和通过this之间访问data有什么区别呢?是否也是通过数据代理机制来实现的呢?

三、和 data 的区别?

this.count访问count的时候是通过数据代理机制的getter方法来实现的,而通过Vue实例来访问methods中定义的方法使用的却不是数据代理机制,是通过 Vue 在初始化阶段,手动把 methods 中的函数“挂载”到 Vue 实例(vm)上实现的。

绑定的过程大致如下所示。

function initMethods(vm, methods) {for (let key in methods) {const method = methods[key]// 只接受函数,其他类型会报错if (typeof method !== 'function') {console.warn(`${key} is not a function`)continue}// 把方法“复制”到 Vue 实例上,并绑定 thisvm[key] = method.bind(vm)}
}

 

 

 

 

http://www.xdnf.cn/news/9915.html

相关文章:

  • 熵最小化Entropy Minimization (一): 基本认识
  • 解析楼宇自控系统:分布式结构的核心特点与优势展现
  • Visual studio 中.sln/.vcxproj/.vcxproj.filters和.vcxproj.user文件的作用
  • SAP Business ByDesign:无锡哲讯科技赋能中大型企业云端数字化转型
  • PowerDesigner通过SQL反向生成类图
  • RustDesk 搭建自建服务器并设置服务自启动
  • Visual Studio+SQL Server数据挖掘
  • 【25软考网工】第九章(3)网络故障排除工具
  • 电子书阅读器:基于UDP的网络日志调试系统
  • Compose仿微信底部导航栏NavigationBar :底部导航控制滑动并移动
  • 大数据时代的利剑:Bright Data网页抓取与自动化工具共建高效数据采集新生态
  • 语法糖介绍(C++ Python)
  • Flutter实现不规则瀑布流布局拖拽重排序
  • 嵌入式自学第三十一天
  • 反范式设计应用场景解析
  • 【飞控】ChibiOS与NuttX
  • 【C++】ldd常见命令
  • st倍增(st表)
  • 运行apt install为何卡顿 (by quqi99)
  • Nginx版本平滑迁移方案
  • @ModelAttribute、@RequestBody、@RequestParam、@PathVariable 注解对比
  • 农村土地承包经营权二轮延包—归户表
  • day13 leetcode-hot100-22(链表1)
  • cf2059B
  • 【模板-指南】
  • 12:遨博机器人开发
  • 软考-系统架构设计师-第七章 软件工程基础知识
  • 学生管理系统V2.0
  • PCA主成分分析与Python应用
  • View的工作流程——measure