详解Vue源码中一些跑龙套函数

  

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)      之前      

详解Vue源码中一些跑龙套函数

  

上图是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源码中一些跑龙套函数