Попытка понять источник underscore.js - вызов и применение, используемые в библиотеке

В замечательной библиотеке Underscore.js Джереми Ашкенаса я попытался понять одну вещь об исходном файле. Я не понимаю этого:

var slice = Array.prototype.slice;
args = slice.call(arguments, 2);

Так что:

args = Array.prototype.slice.call(arguments, 2);

.call или .apply - это методы функций. Но вот какие функции делают .звоните обратитесь к? Первым параметром должен быть контекст, но аргументы - это контекст? Вторым параметром должны быть параметры, передаваемые в функции. Вот они номер 2 . Что это значит? Иногда в библиотеке используется 1 или 0 . Это количество параметров, передаваемых в функции?

_.bind = function bind(func, context) {
    var bound, args;
    if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
    if (!_.isFunction(func)) throw new TypeError;
    args = slice.call(arguments, 2);
    return bound = function() {
      if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
      ctor.prototype = func.prototype;
      var self = new ctor;
      var result = func.apply(self, args.concat(slice.call(arguments)));
      if (Object(result) === result) return result;
      return self;
    };
  };

Вопрос 2: Не совсем понимаю логику этой функции. Нужна помощь, чтобы понять. Пример должен быть очень полезным.

  // Invoke a method (with arguments) on every item in a collection.
  _.invoke = function(obj, method) {
    var args = slice.call(arguments, 2);
    return _.map(obj, function(value) {
      return (method.call ? method || value : value[method]).apply(value, args);
    });
  };

Спасибо за помощь.

7
задан asymmetric 22 April 2012 в 16:48
поделиться