第二章

arguments是一个字面量
用arguments可以实现未知参数数目的函数


function addAll(){
    return _.reduce(arguments,function(left,right){
        return left+right;
    },0)
}
console.log(addAll(1,2,3,4,4,5));

_.bindAll也是这个方法实现的

  _.bindAll = function(obj) {
    var i, length = arguments.length, key;
    if (length <= 1) throw new Error('bindAll must be passed function names');
    for (i = 1; i < length; i++) {
      key = arguments[i];
      obj[key] = _.bind(obj[key], obj);
    }
    return obj;
  };

使用call的时候函数本体是不会变的,传入的参数是会改变this值的。并不会调用传入参数的这个方法

var a = 123;
console.log(a.toString());//'123'
console.log(toString.call(a));//[Object Number]

其实调用的是Object.prototype.toString方法
通过这个方法还可以判定变量的类型。
isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.都可以

underscore内部实现类型判断

  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
    _['is' + name] = function(obj) {
      return toString.call(obj) === '[object ' + name + ']';
    };
  });

underscore内部判定Array

  var nativeIsArray      = Array.isArray,
  _.isArray = nativeIsArray || function(obj) {
    return toString.call(obj) === '[object Array]';
  };

先看有没有nativeIsArray方法,因为是ES5的新增方法。不然就用其他办法。
判定undefined的方法

_.isUndefined = function(obj) {
    return obj === void 0;
  };

Null

  _.isNull = function(obj) {
    return obj === null;
  };

for里面可以不只写一句话
函数返回值可以是数组
写函数默认值的写法可以写成 值||默认值

  _.range = function(start, stop, step) {
    if (stop == null) {
      stop = start || 0;
      start = 0;
    }
    step = step || 1;

    var length = Math.max(Math.ceil((stop - start) / step), 0);
    var range = Array(length);

    for (var idx = 0; idx < length; idx++, start += step) {
      range[idx] = start;
    }

    return range;
  };

Javascript中,所有在函数体内部var声明的都会隐式移到顶部,这个动作叫做吊装(hoisting)
使用_.clone可以复制一个global对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值