В исходном коде _.invoke, какова роль аргументов? - PullRequest
0 голосов
/ 24 октября 2019

Я только начал изучать JS несколько месяцев назад и пытался понять, что "args" делает в исходном коде "_.invoke". Кто-нибудь может ответить на этот вопрос, пожалуйста?

Я прочитал mdn .apply и прочитал другие исходные коды _.invoke, но не смог понять.

  _.invoke = function (collection, functionOrKey, args) {
    if(typeof functionOrKey === "string") {
      return _.map(collection, function(item) {
        return item[functionOrKey].apply(item, args);
      });
    }
    else return _.map(collection, function(item) {
      return functionOrKey.apply(item, args);
    });
  };

test functionпримерно так:

_.invoke(['dog', 'cat'], 'toUpperCase');
      });

      it('runs the specified method on each item in the array, and returns a list of results', function() {
        var upperCasedStrings = _.invoke(['dog', 'cat'], 'toUpperCase');

        expect(upperCasedStrings).to.eql(['DOG', 'CAT']);

в тестовой функции, нет аргументов, почему!?

1 Ответ

2 голосов
/ 24 октября 2019

Все, что происходит, это то, что вы берете аргумент или массив аргументов для применения к функции, используемой для сопоставления коллекции - все три аргумента передаются в функцию.

Это похоже на другие методывы можете найти в библиотеках, таких как Lodash / Underscore.js - это по сути пользовательская функция отображения, где вы передаете аргументы следующим образом:

let mapped = _.invoke(arr, aFunc, ["anArgument", 2]);

Если аргументы не переданы, то переданная функция не нужнаАргументы - toUpperCase не нуждается в аргументах, поэтому они не нужны - поэтому они не передаются.

...