set(target, key, value) {
if (key in target.setupCtx) {
target.setupCtx[key] = value
} else {
target.dataCtx[key] = value
}
}
})
上面就是代理的部分,当我们访问this.proxy
的某个值的时候,会走入get方法,在get方法中就可以做优先级判断等等操作,如果使用了setupAPI
就从setup函数中取值,否则就从传统的optionAPI
中的data中取值。设置值也是一样的理解
proxy
和Object.defineProperty
的api风格非常像,但是性能更高,同时也可以做更多的事情,具体红宝书上有详细的描述功能
代码部分
代码不长,但是很值得多看几遍,我也是自己看了一些源码,再跟着老师一起写下来的。收获很大。
function createApp(config) {
let app = {}
app.mount = function (id) {
// 宿主元素
this.rootDOM = document.getElementById(id)
if (!config.render) {
/*
判断传入的配置项是是否有render方法 如果没有就自己通过编译生成render方法
*/
config.render = this.compile(this.rootDOM.innerHTML)
// 将宿主元素的 innerHTML 部分进行编译,主要就是为了处理 像 {{}} @ v-if 等等插值表达式,指定进行编译成浏览器认识的代码
}
if (config.setup) {
this.setupCtx = config.setup()
} else {
this.dataCtx = config.data()
}
/*
封装一个 proxy 对象代理, 相比于Object.defineProperty 性能更高,且可以代理代理至别的对象,有他可以很好的兼容vue2和vue3的api
*/
this.proxy = new Proxy(this, {
get(target, key) {
if (key in target.setupCtx) {
return target.setupCtx[key]
} else {
return target.dataCtx[key]
}
},
set(target, key, value) {
if (key in target.setupCtx) {
target.setupCtx[key] = value
} else {
target.dataCtx[key] = value
}
}
})
/*
这里把这个代理传进入 将来访问代理的某个值 就会进入代理的 get方法
get方法就会去判断是否又 setup api 如果有就用 setup api 没有就用 option api
*/
const el = config.render.call(this.proxy)
this.rootDOM.innerHTML = ‘’
this.rootDOM.appendChild(el)
return this
}
app.compile = function (template) {
/*
这个是个阉割版本的 生成写死的h3标签了
尤大大完整版这里是会根据 template 去解析有什么dom,把DOM中的 {{title}} 替换成用户传入对象的数据的那个title
目前只是为了理解mount的过程 所以就写一个阉割版本,但是这样写下来,已经能够很好的理解和明白 mount 函数的作用和意义了
*/
return function () {
const h3 = document.createElement(‘h3’)
h3.textContent = this.title
return h3
}
}
return app
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
结尾
学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】