vue data不可以使用箭头函数的问题解析

这篇文章主要介绍了vue data不可以使用箭头函数问题,本文通过源码解析给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

首先需要明确,a() {}和 b: () => {}是不同的

 let obj = {   a() {},   // 相当于   a:function() {},   b: () => {}}

登录后复制

1 VUE.js 源码解析

注意此处只设计核心代码

立即学习“前端免费学习笔记(深入)”;

这段代码也是UMD实现原理,本文这里不是重点,有兴趣的可以自行探究。

(function (global, factory) {   typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :   typeof define === 'function' && define.amd ? define(factory) :   (global.Vue = factory());  }(this, (function (){   'use strict';    console.log(this) //*undefined*  })))

登录后复制

解析一:

对于javascript来说,非严格模式下函数都会有一个this指向,不清楚的这里有传送门this指向相关

说一下本文中涉及的this指向问题,如果不是严格模式,this应该指向window,但是由于vue作者使用的是严格模式,所以他指向了undefined

以下是vue中data的实现原理

 (function (global, factory) {   typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :   typeof define === 'function' && define.amd ? define(factory) :   (global.Vue = factory());  }(this, (function (){   'use strict';   function getData(data,vm) {    return data.call(vm, vm)   }   function initData(params) {    data = vm._data = typeof data === 'function'    ? getData(data, vm)    : data || {};   }   initData()    })))

登录后复制

也就是说每次新创建实例的时候都会去判断是否有data函数,如果有的话就会将其赋值给vm._data,心细的同学会发现对于Vmm实例来说是没有data,而是有vm._data

es5函数和es6箭头函数

 var obj = {   a: () => {   'use strict';    console.log(this,'a')   },   b() {    console.log(this,'b')   },   c() {    // window    let e = () => {     console.log(this,'e')    }    return e   }  }  obj.a() // window  obj.b() // obj  obj.c()() // obj

登录后复制

对于普通函数(非严格模式下),this指向调用者,es6中的this指向声明时的上下文环境。

结合以上两点解析今天的问题

 (function (global, factory) {   typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :   typeof define === 'function' && define.amd ? define(factory) :   (global.Vue = factory());  }(this, (function (){   'use strict';   let vm = {}   var data = () => {    console.log(this);//undefined    return {     a: 1    }       }   function getData(data,vm) {    return data.call(vm, vm)   }   function initData(params) {    data = vm._data = typeof data === 'function'    ? getData(data, vm)    : data || {};   }   initData()   console.log(vm);  })))

登录后复制

以上代码说明你使用箭头函数给data: () => {} this指向undefined的时候,是会赋值给vm._data,但是他会相当于一个全局的,只要你不刷新页面他就会缓存你的data。

如果我们使用data() {}this指向Vm实例,所以他会随着实例更新。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Vue iview-admin框架二级菜单改为三级菜单的方法

关于Vue iview-admin框架二级菜单改为三级菜单的方法

以上就是vue data不可以使用箭头函数的问题解析的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2747335.html

(0)
上一篇 2025年3月8日 04:19:34
下一篇 2025年3月6日 18:34:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue路由拦截及页面跳转设置的方法介绍

    这篇文章主要介绍了vue路由拦截及页面跳转的设置方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 路由设置:router/index.js export default new Router({  routes: [   {  …

    编程技术 2025年3月8日
    200
  • Vue+mui实现图片的本地缓存

    这篇文章主要介绍了vue+mui实现图片的本地缓存的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 下面一段代码给大家分享基于Vue+mui实现图片的本地缓存,具体代码如下所示: const menu = { state:…

    编程技术 2025年3月8日
    200
  • vue组件name的介绍

    大家在写vue项目的时候会遇到给组件的各种命名,接下来通过本文给大家分享vue组件name的作用小结,感兴趣的朋友一起看看吧 我们在写vue项目的时候会遇到给组件命名  这里的name非必选项,看起来好像没啥用处,但是实际上这里用处还挺多的…

    2025年3月8日
    200
  • 基于Vue自定义指令实现按钮级权限控制的方法

    这篇文章主要介绍了基于vue自定义指令实现按钮级权限控制,本文给大家介绍的非常详细,感兴趣的朋友一起学习吧 思路: 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个token,拿到token之后(我会将这个…

    编程技术 2025年3月8日
    200
  • vue-cli项目根据线上环境分别打出测试包和生产包的方法

    这篇文章主要介绍了vue-cli项目根据线上环境打出测试包和生产包的方法,内容挺不错的,现在分享给大家,也给大家做个参考。 最近用vue-cli搭建了项目,准备上线时发现脚手架自带的npm run buil只能打出请求生产接口的生产包,但是…

    2025年3月8日 编程技术
    200
  • 使用 vue-i18n 切换中英文的效果

    这篇文章主要介绍了使用 vue-i18n 切换中英文效果,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 vue-i18n 仓库地址:https://github.com/kazupon/vue-i18n 兼容性: 支持 Vue.j…

    2025年3月8日 编程技术
    200
  • 基于Vue的延迟加载插件vue-view-lazy的介绍

    这篇文章主要介绍了基于vue的延迟加载插件vue-view-lazy,可以使图片或者其他资源进入可视区域后加载,内容挺不错的,现在分享给大家,也给大家做个参考。 基于vue的懒加载插件 目的:图片或者其他资源进入可视区域后加载 安装使用 直…

    编程技术 2025年3月8日
    200
  • 关于vue组件jsx语法的使用介绍

    本篇文章主要介绍了vue组件jsx语法的具体使用,内容挺不错的,现在分享给大家,也给大家做个参考。 如果使用render函数来写比较复杂的vue组件,对于可读性和可维护性都很不友好,而使用jsx就会让我们回到更接近于模板的语法。babel转…

    编程技术 2025年3月8日
    200
  • 如何解决vue的语法规则检测报错的问题

    这篇文章主要介绍了关于vue的语法规则检测报错问题的解决,在配置路有的时候,陆续出现了各种报错其中最多的是一些写法,例如空格,缩进,各种括号,非常具有实用价值,需要的朋友可以参考下 搭建了一个vue项目,在配置路有的时候,陆续出现了各种报错…

    2025年3月8日 编程技术
    200
  • vue2.0 实现导航守卫(路由守卫)

    这篇文章主要介绍了vue2.0 实现导航守卫(路由守卫)的相关知识,vue-route 提供的 beforerouteupdate 可以方便地实现导航守卫(navigation-guards),需要的朋友可以参考下 路由跳转前做一些验证,比…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论