请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

真就是读源码?

视频00:36
代码是:var value = getter ? getter.call(obj) : val;
您说的“然后呢它首先拿到getter,然后尝试计算,然后没有getter就直接取这个值”

不是?我真是很努力的在看视频,不想白花钱。我就想问问您。您这个是源码解析还是读源码。真就照着读一遍就完事了?
什么叫尝试计算?getter.call(obj)和“尝试计算”什么关系?

我自己打断点看到getter就是undefined。我也不知道为什么,我也不知道getter.call(obj)什么情况下触发。我只能自己跟着源码读一遍不断的尝试什么情况下会有getter,什么情况下触发getter.call(obj)。如果您之后的视频里面会讲为什么不提一句“之后会讲”。而是直接一笔带过了。getter是什么情况下产生什么情况下会调用。当初作者为什么想这么做。这不才是源码分析吗?就跟着源码的执行过程读一遍就源码分析了?我真是气死气死气死气死。

关键确实我自己比较菜,我知道的东西也不多。可能知识储备不够,还不懂您说的什么意思。但是我就更想问一句。如果您随口提的一句话我就懂了,那我为什么要跟着视频看源码,而不是自己去看源码。

正在回答 回答被采纳积分+3

2回答

ustbhuangyi 2021-01-20 11:02:31

为啥有些源码我会在视频里说这个之后讲,是因为看源码也是有技巧的,就是主线优先,你可以把代码的执行过程想象成一个颗树的遍历,会有很多的分支,如果一下把所有分支都讲到,是不现实的,也是浪费时间的。


这篇文章推荐你看看,也是我写的:https://juejin.cn/post/6844903617762492423


你提到的占位 vnode,渲染 vnode,这个说法确实不好,当然 Vue2 源码本身命名就不好,我在 《Vue.js 3.0 核心源码解析》课程中对这个说法做了个优化,截图给你参考一下:

https://img1.sycdn.imooc.com//szimg/60079be909e1411716221258.jpg

通过例子可能更好理解。

另外,这个课程学习过程中,你会发现很多你不懂的知识点,这其实是好事,说明你可以学习到新东西,而老师在这里就可以起到一个辅助的作用,比如你自学学不会的就可以来提问。想象一下,如果你学一门课很轻松,看上去老师和学生都 happy,但其实你可能啥也没学到,因为你早就会了。对于你没见过的知识点,比如 Object.getOwnPropertyDescriptor,你可以去 mdn 上查一下自己学一下。很多知识点我没讲,有可能是我漏讲了,也可能我认为它并没有那么重要,因为这个课程已经有 25 个小时了,如果什么都面面俱到的讲,时长会非常长,还望理解。

最后,这个课程的问答区我建议你也逛一逛,因为有些问题问的也很不错,我也做了详细的回答,也算是对课程的补充,这些东西都是你买这门课的附加价值,要充分利用喔。




1 回复 有任何疑惑可以回复我~
ustbhuangyi 2021-01-19 17:52:40

首先,给你学习造成的困惑表示歉意。

其次,我来针对你的疑问解答

https://img1.sycdn.imooc.com//szimg/6006a9c00905034b22001380.jpg
你的疑问是这个 getter 为啥调试的是 undefined,首先我们要知道这个 getter 是什么,这个 getter 是 property.get ,那这个 property 是 Object.getOwnPropertyDescriptor(obj, key) 的返回值,其实这个 getter 就是 obj.key 这个对象原有的 getter 函数,比如之前就通过 Object.defineProperty 给 obj.key 定义了 getter 函数了。

所以后面红框的逻辑就是如果之前已经定义过 getter 函数了,那么就调用原有 getter 函数,拿到返回值,否则就直接取 val,也就是 obj[key] 的值。

再次,我想说这门课的设计就是为有基础的同学进阶的,如果你基础还比较薄弱,建议先打牢基础,另外学习过程中遇到任何的问题,都可以来问答区提问,所有问题我都会解答,这也是你购买这门课的价值之一。录视频都是脱稿录的,所以难免有表达不够的情况,如果你觉得我视频里哪些地方讲的难以理解或者有问题,也欢迎你在问答区指出来,我们一起来帮助完善。

你的抱怨我可以理解,但是光抱怨是解决不了问题的,我想你既然花钱买了这门课,就应该充分利用这门课的学习资源,遇到问题多提问,然后自己多总结。

这门课当然不可能只是照读源码,你刚学有困惑也是很正常的,毕竟这门课的难度在这,源码本身也很抽象,希望你能有耐心,恒心,一遍看不懂就多看几遍,多打断点多调试,等到你学通的那天,你会发现这些努力都是值得的,加油吧:)

0 回复 有任何疑惑可以回复我~
  • 提问者 学习为致及 #1
    哇,竟然被认真的回复了。我主要看评论都是一年前的了,问的问题还很少,我以为这个课程没人管了。没想到老师还天天盯着评论。我先道个歉,脾气确实不太好。因为光是第二章我就看了两三遍才看明白。好多地方都是自己debugger出来的。我确实实力还没那么高。所以我想每一句话都听懂,听不懂也要搞清楚是干什么的结果您很多地方就一笔带过了。我真是难受到爆炸。
    其实我真不知道为什么评论区评论这么少,大家都能听懂就我自己听不懂么。正常来说这个是进阶教程,但是对于源码领域来说也算是一个“新手教程”吧。其实我真的有很多很多想说的问题。
    就比如说。
    1.您讲东西就直接按着源码一句一句讲,一个方法遇到if判断的地方就“之后我们再说”。这就让给我很困惑。这个整个方法到底都有什么功能,是做什么的?就只有听完整一章的内容才能知道整个方法是做什么的,这就导致我必须反复观看您的视频。虽然学习视频是应该反复观看。。但是反复观看也应该是复习啊。。不应该是反复看好几遍学习。。
    2.有的名词也搞不懂,就比如之前评论里说的渲染vnode,和占位vnode。。这个真的能听一次就明白么。。渲染vnode是啥。。。您也没说。我只能自己debugger看这个对象是啥。
    3.最最最重要的是。虽然我不是教师专业。。但是鄙人多年听课经验。我觉得讲课应该是先讲关键知识点。最后把知识点串起来形成一整个知识网络。而不是上来就顺着知识网就开始爬。
    
    我回来百度getOwnPropertyDescriptor了。知道了大概是怎么回事儿。但是。。不是。。这个getOwnPropertyDescriptor是不是高端程序员也不会自己没事儿调用这个方法吧。还是说大佬的世界我不懂。我觉得您应该略微详细的讲一下它是什么。
    
    反正我就是一顿指点江山。哎。。舒服多了。明天继续反复观看视频 emmmmm
    回复 有任何疑惑可以回复我~ 2021-01-19 22:17:43
  • 旋涡鸣人_ 回复 提问者 学习为致及 #2
    本来就复杂。。。 有困惑也是正常的 ? 我已经刷过一遍了 ,但是 这不还回来看
    回复 有任何疑惑可以回复我~ 2021-01-24 21:26:02
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信