vue.js源码学习分享(二)
/** * Check if value is primitive//检查该值是否是个原始值 */ function isPrimitive (value) { return typeof value === 'string' || typeof value === 'number' } /** * Create a cached version of a pure function.//创建一个纯粹的函数的缓存版本 */ function cached (fn) { var cache = Object.create(null);//创建一个缓存对象 return (function cachedFn (str) {//返回一个函数 var hit = cache[str];//以函数的参数为键 return hit || (cache[str] = fn(str))//如果缓存对象中存在这个键,那么就从缓存中返回这个函数,如果没有就把这个函数赋值到缓存对象中并且返回 }) } /** * Camelize a hyphen-delimited string.//驼峰化一个连字符连接的字符串 */ var camelizeRE = /-(\w)/g; var camelize = cached(function (str) { return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }) }); /** * Capitalize a string.//对一个字符串首字母大写 */ var capitalize = cached(function (str) { return str.charAt(0).toUpperCase() + str.slice(1)//把第一个字符串的首个字符大写,把除第一个字符的字符串返回与大写的首字符拼接 }); /** * Hyphenate a camelCase string.用字符号连接一个驼峰的字符串 */ var hyphenateRE = /([^-])([A-Z])/g; var hyphenate = cached(function (str) { return str .replace(hyphenateRE, '$1-$2')//$1为正则表达式匹配的第一个元素$2为第二个元素 .replace(hyphenateRE, '$1-$2') .toLowerCase()//使之最小化 }); /** * Simple bind, faster than native//简单的绑定,会比原生的更快 */ function bind (fn, ctx) { function boundFn (a) { var l = arguments.length;//获取实参的数量 return l ? l > 1//如果实参数量大于1 ? fn.apply(ctx, arguments) : fn.call(ctx, a)//实参数量等于1 : fn.call(ctx)//没有参数 } // record original fn length//记录一下原始的形参数量 boundFn._length = fn.length; return boundFn } /** * Convert an Array-like object to a real Array.//转换一个类数组的对象为真正的数组 */ function toArray (list, start) { start = start || 0;//如果start存在则用start如果不存在则用0; var i = list.length - start;//设置新数组的数量 var ret = new Array(i);//新建数组 while (i--) {5 ret[i] = list[i + start]; } return ret }
请爱好前端技术的朋友,联系我,有问题大家一起讨论