data:{
list:[1,2,3,4],
msg:‘10086’
}
})
2.Vue中数据代理和数据劫持
上边数据代理把所有data中的数据代理到new出来的Vue实例上,这样的话,就是对Vue实例上数据的存取等同于对data数据的存取,但是data本身还不是一个响应式的,对data的存取还没有触发我们想要的回调函数,所以用上Vue数据劫持
class Vue {
//options是传过来的参数类似一个对象
constructor(options){
//把options存起来,可能会在实例中用到
this.$options = options
//data可能会是函数
this._data = options.data
this.initData()
}
initData() {
let data = this._data;
//获取到data对象中所有的键
let keys = Object.keys(data)
//循环遍历 实现数据代理到Vue实例上,
for(let i = 0 ; i < keys.length ; i++){
Object.defineProperty(this,keys[i],{
//设置为true,表示可以被遍历
enumerable:true,
//可以删除属性,或者修改其特性(writable,configurable,enumerable)
configurable:true,
//获取值的时候触发
get:function proxyGetter(){
//获取到的值返回出去
return data[keys[i]]
},
//修改值的时候触发
set:function proxySetter(value) {
//改变值的时候,给获取到的值赋值新值value
data[keys[i]] = value
}
})
}
//调研判断是基本类型还是复杂类型的数据 来实现数据劫持
observe(data)
}
}
//判断类型的函数observe
/**
-
@param {*} data
*/
function observe(data) {
//判断data的数据类型
let type = Object.prototype.toString.call(data)
//如果是基本类型就直接返回
if(type !== ‘[object Object]’ && type !== ‘[object Array]’){
return
}
//如果是复杂类型,new一个实例
new Observer(data)
}
//创建一个观察值类,观察data中的数据变化
class Observer {
constructor(data) {
//调用函数
this.walk(data)
}
//walk函数
walk(data) {
let keys = Object.keys(data)
for(let i = 0; i < keys.length; i++){
//代用抽离出去的函数,此时是实现data中的数据劫持,使data成为响应式的
//第一个参数就是data对象,第二个是属性,第三个是改变之前的值
defineReactive(data,keys[i],data[keys[i]])
}
}
}
//抽离函数
/**
-
@param {*} obj 传进来的对象
-
@param {*} key 属性
-
@param {*} value 之前的值
*/
function defineReactive(obj,key,value){
//递归,判断数据类型
observe(obj[key])
Object.defineProperty(obj,key,{
enumerable:true,
configurable:true,
//获取到属性值时调用该函数
get:function reactiveGetter(){
console.log(${key}数据劫持取值
)
//或取到的值返回出去
return value
},
//设置值的时候掉用该函数
set:function reactiveSetter(val){
//对比新设置的值和原来的值是否相同
if(val === value){
//相同的话直接返回
return
}
//否则,设置新值
console.log(${key}数据劫持的值发生变化
)
value = val
}
})
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
![](https://img-blog.csdnimg.cn/img_convert/062c892b452bf49a08a7e7c3526e27c0.jpeg)
最后
基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。
什么?你问面试题资料在哪里,这不是就在你眼前吗(滑稽
24/03/13/H4lCoPEF.jpg" />
最后
基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。
什么?你问面试题资料在哪里,这不是就在你眼前吗(滑稽