underscore原始碼解析1

weixin_34208283發表於2017-08-27
  1. _.noop()
    不論傳遞給它的是什麼引數,返回的都是undefined。

_.noop()
=> undefined

//函式如果沒有return返回值的話,預設的就是返回undefined。
_.noop = function() {};
  1. _.random(min,max)
    返回一個min和max之間的隨機整數。如果你只傳遞了一個引數,那麼將返回0和這個引數之間的整數。

_.random(0,100);
=> 42

_.random = function(min,max) {
//如果只傳了一個引數的話,就把max的值設定為這個引數,而min設為0
  if (max == null) {
    max = min;
    min = 0;
  }
  return min + Math.floor(Math.random() * (max - min + 1));
};

Math.random()方法返回大於0小於1的一個隨機數。
Math.floor()方法執行向下舍入,即它總是將數值向下舍入為最接近的整數。

  1. _.now()
    一個優化的方式來獲取一個當前時間的整數時間戳。可用於實現定時/動畫功能。

_.now();
=> 1503801043810

_.now = Date.now || function() {
  return new Date().getTime();
}

Date.now是ES5提出來的方法,如果瀏覽器支援,就等於這個方法,表示呼叫這個方法時的日期和時間的毫秒數。
反之就使用new操作符和Date建構函式建立一個日期物件,在呼叫Date建構函式而不傳遞引數的情況下,新建立的物件自動獲得當前的日期和時間,再呼叫getTime方法,返回表示日期的毫秒數。

  1. _.uniqueId([prefix])
    為需要的客戶端模型或DOM元素生成一個全域性唯一的id。如果prefix引數存在,id將附加給它。

.uniqueId('contact');
=> 'contact_1'

var idCounter = 0;
_.uniqueId = function(prefix) {
  var id = ++idCounter + '';
  return prefix ? prefix + id : id;
}
  1. noConflict
    放棄Underscore的控制變數“_”。返回Underscore物件的引用。

var underscore = _.noConflict();

//‘this’是指向_的,準確的說是內部的_
var root = this;
var previousUnderscore = root._;

_.noConflict = function() {
  root._ = previousUnderscore;
  return this;
};

拿上面的例子來說,就是把這個控制變數"_"返回給了underscore;就像是jquery的“$”符號noConflict以後呼叫就要用jQuery('div')一樣的效果,避免全域性變數衝突。

  1. _.identity(value)
    返回與傳入引數相等的值。相當於數學裡的:f(x) = x
    這個函式看似無用,但是在Underscore裡被用作預設的迭代器iterator

var stooge = {name : 'moe'};
=> stooge === ._identity(stooge)
=> true

_.identity = function(value) {
  return value
}

就是把傳入的引數返回

  1. .constant(value)
    建立一個函式,這個函式返回相同的值用來作為
    .constant的引數。

var stooge = {name: 'moe'};
stooge === _.constant(stooge)();
=> true

_.constant = function(value) {
  return function() {
    return value;
  }
}

返回一個函式,這個函式再返回這個傳入的引數。(返回一個能返回引數本身的函式)

  1. _.isUndefined(value)
    如果value是undefined,返回true。

_.isUndefined(window.missingVariable);
=> true

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

學習參考http://www.qdfuns.com/house/17398/note/class/id/bb6dc3cabae6651b94f69bbd562ff370/page/2.html
https://github.com/hanzichi/underscore-analysis/blob/master/underscore-1.8.3.js/underscore-1.8.3-analysis.js
http://www.css88.com/doc/underscore/#isEmpty
http://www.css88.com/doc/underscore/docs/underscore.html

相關文章