Flask接口签名sign原理与实例代码浅析
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~