JS中很多开源库都有一个跑龙套文件夹,来存放一些常用的函数。这些套路属于那种常用但是不在ES规范中,同时又不足以单独为它发布一个npm模块,所以很多库都会单独写一个工具函数模块。
最进尝试阅读vue源码,看到很多有意思的函数,在这里分享一下。
Object.prototype.toString.call (arg)和字符串(arg)的区别?
上述两个表达式都是尝试将一个参数转化为字符串,但是还是有区别的。
字符串(arg)会尝试调用arg.toString()或者arg.valueOf(),所以如果参数或者arg的原型重写了这两个方法,Object.prototype.toString.call (arg)和字符串(arg)的结果就不同
const _toString=Object.prototype.toString var obj={} obj.toString()//(对象对象) _toString.call (obj)//(对象对象) obj。toString=()=比;“111” obj.toString ()//111 _toString.call (obj)//(对象对象)/hello/.toString ()///hello/_toString.call (/hello/)//(对象RegExp) >之前
上图是ES2018的截的图,我们可以知道Object.prototype.toString的规则,而且有一个规律,Object.prototype。toString的返回值总是[对象+标签+],如果我们只想要中间的标签,不要两边烦人的补充字符,我们可以
函数toRawType(价值){ 返回_toString.call(值)。片(1) } toRawType//傲恪?null) toRawType (/sdfsd/)//罢虮泶锸健? >之前虽然看起来挺简单的,但是很难自发的领悟到这种写法,有木有. .
假如有这样的一个函数
函数计算(str) {//假设中间的计算非常耗时 控制台。日志(2000年代过去了) 返回的结果的 }我们希望将一些运算结果缓存起来,第二次调用的时候直接读取缓存中的内容,我们可以怎么做呢?
函数缓存(fn) { const缓存=Object.create(空) 返回函数cachedFn (str) { 如果缓存(! (str)) { 缓存(str)=fn (str) } 返回缓存(str) } } var cachedComputed=缓存(计算) cachedComputed (ss)//打印2000年代已经过去了 cachedComputed (ss)//不再打印 >之前
const camelizeRE=/- (\ w)/g const camelize=缓存((str)=比;{ 返回str.replace (camelizeRE (_, c)=比;c & # 63;c.toUpperCase ():”) }) camelize (“hello world”)//癶elloWorld” >之前
const inBrowser=typeof窗口!==岸ㄒ濉? const inWeex=typeof WXEnvironment !==ㄒ濉?,! ! WXEnvironment.platform const weexPlatform=inWeex,,WXEnvironment.platform.toLowerCase () const UA=inBrowser,,window.navigator.userAgent.toLowerCase () const isIE=UA和,/msie |三叉戟/test (UA) const isIE9=UA和,UA。indexOf (msie 9.0)比;0 const isEdge=UA和,UA.indexOf(“边缘/?在0 const isAndroid=(UA和,UA.indexOf祝辞(“android”);0)| | (weexPlatform===癮ndroid”) const isIOS=(UA和,ipod/iphone ipad | | | ios/test (UA)) | | (weexPlatform===ios) const isChrome=UA和,/\/\ d +铬/test (UA),,isEdge ! const isPhantomJS=UA和,/phantomjs/test (UA) const isFF=UA和,UA.match (/firefox \/(\ d +)/) >之前判断一个函数是宿主环境提供的还是用户自定义的
console.log.toString ()//日志”功能(){[本机代码]}” 函数fn () {} fn.toString ()//函数fn () {}”//所以 函数isNative(男星){ 返回typeof男星===δ堋?,/本机代码/test (Ctor.toString ()) } >之前以上所述是小编给大家介绍的Vue源码中一些跑龙套函数详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
详解Vue源码中一些跑龙套函数