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

网友投稿 422 2023-01-27


解析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指向相关

以下是vue中data的实现原理

http:// (function (global, factory) {

typeof exports === 'object' && typeof modhttp://ule !== '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

}

}

http://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不可以使用箭头函数问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:共享文件系统怎么找到密码(共享文件的用户名和密码在哪里查看)
下一篇:接口自动化测试职业规划(接口自动化测试简历)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~