猿人学第一届第10题-0基础补环境入门
只要方向是对的,肯定是可以走到终点的。
自使用jsdom做出第10题已经过去15天了,期间本来想直接研究某s的vmp的,但是发现实在是太复杂了,期间了解到补环境框架可以过某s的vmp,所以我就拿第十题来学习补环境框架。
前置基础知识
现在的学习都是站在巨人的肩膀上的,所以学习起来效率很高,补环境的知识我是刷的志远补环境课程,刷了三遍,每一遍都有新的收获,非常感谢志远大佬开源的课程。
在写补环境框架之前需要了解的前置知识有proxy、原型、原型对象、实例,只有把这些基础知识了解之后写补环境框架才能不卡壳。这里我就不写这些内容了,我们直接看题。
补环境的过程
补的时候就是缺啥补啥,看到undefined,就去浏览器里面查看是否存在,存在就补,不存在就不补。
补的时候注意继承关系,js的继承很像java的继承,每个对象最上层继承都是Object。
在补第十题的环境的时候,有些环境不好补,因为我是分析了源码的运行过程,比如这个位置
这个位置是需要补挺多环境的,但他的逻辑很神奇,你存在这个环境,他就检测这个环境,不存在就不检测,不影响最终答案的出值,所以呀,我补的这个环境其实是有很多没补的,属于投机取巧了。
这道题检测最多的我感觉是document下面的东西,navigator下面检测的东西不多,就补了几个,我补的方式是写死,他检测什么就给他返回什么,后续看看能不能做成动态的吧。
成果展示
之前使用jsdom去做这道题,获取url时间差不多0.5s,使用补环境框架url获取时间到了0.24,提升还是有的。
一些反思
补环境感觉最考验的就是耐心了,补完一个环境又会出现另一个环境,感觉补不完,但是补着补着,就发现补完了,就应证了文章开头那一句,方向如果对了,坚持下去肯定可以到达终点的。但是呀,我现在还是过不去某s的vmp,感觉路还有很长呀。