Создать функцию после функции в JavaScript - PullRequest
0 голосов
/ 04 мая 2019

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

Вот пример того, что я хотел бы.

Selector(element).Action(options, callback);

На практике это было бы так;

cont arr = [1, 2, 3];
Q(arr).insert(4, function (newArr, lengthIndex) {
    console.log(newArr); // => [1,2,3,4]
    console.log(lengthIndex); // => 4
});

Итак, мне было интересно, как можно сделать функцию Action() внутри функции Selector. Я также хотел бы по-прежнему иметь возможность использовать Q(element) для возврата пользовательского объекта для этого. Я думал о возвращении объекта с функциями и пользовательскими элементами внутри него, но я не уверен, хотя.

const Q = function (Element) {
    return {
        type:   typeof Element,
        length: Element.length,

        // Functions
        insert: function (Attribute, Callback) {
            Element.push(Attribute);
            Callback(Element, Element.length);
            return Element;
        }
    };

}

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

~ Q

1 Ответ

0 голосов
/ 04 мая 2019

Звонит chaining.И лучший подход для этого - использовать классы с необходимыми методами, которые будут возвращать себя return this, или создавать новые / другие экземпляры классов, такие как return new Action(someData), в вызываемых методах.Если вы не хотите использовать классы извне, вы можете создать функции-оболочки для создания экземпляров и их возврата:

class Selection{

constructor(args){
  this.args = args;
}

doWork(){
  console.log(this.args);
  return this;
}
}


function select(...args){
   return new Selection(args);
}

select("something").doWork()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...