最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 22:12:04
文档

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

解析vue data不可以使用箭头函数问题:首先需要明确,a() {}和 b: () => {}是不同的 let obj = { a() {}, // 相当于 a:function() {}, b: () => {} } 1 VUE.js 源码解析 注意此处只设计核心代码 这段代码也是UMD实现原理,本文这里不是重点,有兴趣的可以自行探究。 (functi
推荐度:
导读解析vue data不可以使用箭头函数问题:首先需要明确,a() {}和 b: () => {}是不同的 let obj = { a() {}, // 相当于 a:function() {}, b: () => {} } 1 VUE.js 源码解析 注意此处只设计核心代码 这段代码也是UMD实现原理,本文这里不是重点,有兴趣的可以自行探究。 (functi


首先需要明确,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实例,所以他会随着实例更新。

总结

以上所述是小编给大家介绍的vue data不可以使用箭头函数问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

文档

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

解析vue data不可以使用箭头函数问题:首先需要明确,a() {}和 b: () => {}是不同的 let obj = { a() {}, // 相当于 a:function() {}, b: () => {} } 1 VUE.js 源码解析 注意此处只设计核心代码 这段代码也是UMD实现原理,本文这里不是重点,有兴趣的可以自行探究。 (functi
推荐度:
标签: VUE 解析 箭头函数
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top