Vue中methods实现原理

目录

前言

回调函数中的this指向问题

vue实例访问methods

methods实现原理


前言

vue实例对象为什么可以访问methods中的函数方法?methods的实现原理是什么?

回调函数中的this指向问题

在解答前言中的问题前,需要了解一下回调函数中的this指向问题

在正常函数中

 <div class="app"><h1>{{msg}}</h1><button @click="app">+1</button></div><script>const vm = new Vue({el:'.app',data:{msg:'this指向问题',count:0},methods:{app(){console.log(this);console.log(vm === this);}}})</script>

由上述代码验证得出,在普通函数中,this是指向vm的,也就是vue实例对象

在箭头函数中

 app2:()=>{console.log(this);console.log(vm === this);}

由上得知,在箭头函数中,this不是指向vue实例对象的,而是指向window。其实在箭头函数是没有this的箭头函数的this是从父级作用域中继承过来的,在上述代码中,window作用域就是父级作用域

vue实例访问methods

   <div class="app"></div><script>const vm = new Vue({el:'.app',data:{msg:'methods的实现原理'},methods:{app(){alert('hh')}}})</script>

由上述代码及结果得出,Vue实例对象访问methods中的函数是没有做数据代理的,数据代理会调用getter方法,也就是上述截图中msg后面的...,当我们点击时,就会调用getter方法查看数据,所有数据代理只会代理数据,不会代理函数方法

methods实现原理

我们可以自己写一个仅针对于methods配置项的js文件(methods实现原理)

// 定义一个类
class Vue {// 定义构造函数// options是一个纯粹的js对象:{}constructor(options){// 获取所有的方法名Object.keys(options.methods).forEach((methodName,index)=>{// 给当前的Vue实例一个扩展方法this[methodName] = options.methods[methodName]})}
}

原理:

通过Object.keys()获取vue实例中所有的方法名,然后通过forEach()遍历,在上述代码中,this就是指向vm,也就是vue实例对象,给实例对象一个拓展方法,而是什么拓展方法与methods中的方法同名,从而达到了通过vue实例可以访问到methods中的方法

将该文件引入到代码中

 <div class="app"></div><script>const vm = new Vue({el:'.app',data:{msg:'methods的实现原理'},methods:{app(){alert('hh')},app2(){alert('xx')}}})</script>

若上即是methods实现原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/175285.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[sd_scripts]之train

https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_README-zh.mdhttps://github.com/kohya-ss/sd-scripts/blob/main/docs/train_README-zh.md 支持模型fine-tune&#xff0c;dreambooth&#xff0c;lora&#xff0c;textual inversion。 1.数据准备 在任意多个…

K8S 集群搭建

1、搭建清单 2台linux服务器&#xff08;一个master节点&#xff0c;一个node节点&#xff09;&#xff0c;建议搭3台&#xff08;一个master&#xff0c;两个node&#xff09; 我使用的是腾讯云&#xff0c;节点与节点使用公网IP通信 确保2台服务器都安装了docker 2、服务…

kafka单节点创建 topic 超时

1.根据之前的知道&#xff0c;安装kafka的时候改了config的server.properies文件中的listeners配置 之前这一行是没有注释掉的&#xff0c;结果创建topic的时候时钟报错连接超时 结果资料&#xff0c;发现就是因为listeners的问题 https://blog.csdn.net/weixin_42133361/art…

汽车标定技术(九)--标定常量与#pragma的趣事

目录 1. 不添加#pragma语句 2. 添加#pragma语句 3. 标定量只给flash空间&#xff0c;不给ram指定空间 4. 总结 在之前不会使用overlay机制的时候&#xff0c;我们想要做汽车标定&#xff0c;标定常量编译出来的地址一般都应该是ram的地址&#xff0c;而且在链接文件中都会指…

安装DevEco Studio时,遇到的ohpm报错(解决)

如上图所示&#xff0c;我试了网上的各种办法&#xff0c;包括官网的文档&#xff0c;运行init.bat也不行。 接下来我说一下我的办法&#xff1a; 我从官网下载安装包后&#xff0c;将bin文件添加在了环境变量里&#xff08;最终安装的位置&#xff0c;但是因为他会自己下载所…

STM32 LED编程 GPIO的初始化(标准库)

实验的电路图介绍 实验的电路图类似于开漏接法 要初始化GPIOC接口 标准库的模板 GPIO的标准库编程接口 GPIO引脚的初始化 GPIO作为片上外设 每一个片上外设使用前一定要使能时钟 为什么要使能时钟&#xff1f;时钟是啥 时钟的使能 stm32的每一个片上外设都是时序电路 时序…

【Linux网络】1分钟使用shell脚本完成DNS主从解析服务器部署(适用于centos主机)

DNS正向解析主从解析服务器脚本 1、脚本内容 主服务器脚本 #!/bin/bash ##先修改本地DNS缓存服务器 read -p "请输入主服务器ip地址&#xff1a;" masterIP sed -i /DNS/d /etc/sysconfig/network-scripts/ifcfg-ens33 echo "DNS$masterIP" >> /e…

链表面试题

&#x1f493;作者简介&#x1f44f;&#xff1a;在校大二迷茫大学生 &#x1f496;个人主页&#x1f389;&#xff1a;小李很执着 &#x1f497;系列专栏&#xff1a;Leetcode经典题 每日分享&#xff1a;其实要过那条马路并不难&#xff0c;就看谁在对面等你❣️❣️❣️ 目录…

error: C3867: “MainWindow::copyFileCallBack”: 非标准语法;请使用 ““

error: C3867: “MainWindow::copyFileCallBack”: 非标准语法&#xff1b;请使用 “&” 这时候我们按照提示将t.testFun前面加上&又会出现error C2276: “&”: 绑定成员函数表达式上的非法操作&#xff0c; 解决 在函数前面加上static声明

ISP 处理流程

#灵感# 摆烂时间太长了&#xff0c;感觉知识忘光光了。重新学习&#xff0c;常学常新。 因为公司文档都不让摘抄、截取&#xff0c;所以内容是工作的一些自己记录和网络内容&#xff0c;不对的欢迎批评指正。 1、ISP概述 ISP是Image Signal Processor 的简称&#xff0c;也就…

nodejs+vue公益帮学网站的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

在当今高度发达的信息中&#xff0c;信息管理改革已成为一种更加广泛和全面的趋势。为确保中国经济的持续发展&#xff0c; 如何用方便快捷的方式使管理者在广阔的数据海洋里面查询、存储、管理和共享有效的数据信息&#xff0c;对我们的学习&#xff0c;工作和生活具有重要的现…

视频推拉流EasyDSS直播点播平台获取指定时间快照的实现方法

视频推拉流直播点播系统EasyDSS平台&#xff0c;可提供流畅的视频直播、点播、视频推拉流、转码、管理、分发、录像、检索、时移回看等功能&#xff0c;可兼容多操作系统&#xff0c;在直播点播领域具有广泛的场景应用。为了便于用户集成、调用与二次开发。 今天我们来介绍下在…