好吧开始读zepto的源代码,最前面给处理trim和reduce的原生实现,感觉写的很紧凑,其中reduce写的有点晦涩,个人感觉还不错。主要zepto的作者是无分号党,看起了有点不习惯。
3 if (String.prototype.trim === undefined) // fix for iOS 3.2 4 String.prototype.trim = function() { 5 return this.replace(/^\s+|\s+$/g, ‘‘)//类似php的trim函数 6 } 7 8 // For iOS 3.x 9 // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce 10 //这个方法的作用就是累似一个累计处理的作用,将前一条数据的处理结果用作下一次的处理 11 //比如[1,2,3,4,].reduce(function(x,y){ return x+y}); ==> ((1+2)+3)+4, 12 13 if (Array.prototype.reduce === undefined) Array.prototype.reduce = function(fun) { 14 if (this === void 0 || this === null) throw new TypeError() 15 var t = Object(this),//t就是数组自己this的拷贝 16 len = t.length >>> 0,//数组长度 17 k = 0,//数组下标变量 18 accumulator//存放结果的变量 19 if (typeof fun != ‘function‘) throw new TypeError() 20 if (len == 0 && arguments.length == 1) throw new TypeError() 21 //取初始值 22 if (arguments.length >= 2) accumulator = arguments[1] //如果参数长度大于2个,则将第二个参数作为初始值 23 else do { 24 if (k in t) { 25 accumulator = t[k++] //否则将数组的第一条数据作为初绍值 26 break 27 } 28 if (++k >= len) throw new TypeError() //什么情况下会执行到这里来??? 29 } while (true) 30 //遍历数组,将前一次的结果传入处理函数进行累计处理 31 while (k < len) { 32 if (k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t)//核心运算代码 33 k++ 34 } 35 return accumulator 36 }
时间: 2024-10-12 02:24:29