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
}

 

posted @ 2017-04-05 17:14  刘浩2561179983  阅读(1105)  评论(0编辑  收藏  举报