Как привязать к контексту, если он передан? - PullRequest
0 голосов
/ 19 марта 2020

Я написал эту функцию, которая в основном эмулирует функцию Underscore. js с тем же именем. Все работает правильно, за исключением того, что я изо всех сил пытаюсь понять, как привязать к контексту, если он передается. Я уверен, что должен использовать function.prototype.bind (), но я не уверен, как именно это реализовать.

// _.each(collection, iteratee, [context])
// Iterates over a collection of elements (i.e. array or object),
// yielding each in turn to an iteratee function, that is called with three arguments:
// (element, index|key, collection), and bound to the context if one is passed.
// Returns the collection for chaining.

_.each = function (collection, iteratee, context) {
  
  if(Array.isArray(collection)){
    for(let i = 0; i < collection.length; i++){
      iteratee(collection[i], i, collection);
    };
  };

  if(typeof collection === 'object' && !Array.isArray(collection)){
    Object.entries(collection).map(([key, value]) => {
      iteratee(value, key, collection);
    });
  };

  return collection;
};

1 Ответ

0 голосов
/ 19 марта 2020

Вы можете использовать .call, чтобы вызвать iteratee с указанным c контекстом:

iteratee.call(context, value, key, collection);

или создать версию с постоянной привязкой функции iteratee и использовать ее в качестве своей уже используется.

iteratee = iteratee.bind(context);
// calls to iteratee(...) will always have `this` as `context`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...