Передача конструктора в качестве параметра, как если бы он был обычной функцией в JavaScript?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Передача конструктора в качестве параметра, как если бы он был обычной функцией в JavaScript?

Сообщение Anonymous »

Я использую ANTLR 4, и это обычно экземпляры класса и немедленно передавать его в качестве аргумента конструктора следующего класса, согласно документам для цели JavaScript Antlr 4: < /p>

Код: Выделить всё

import antlr4 from 'antlr4';
import MyGrammarLexer from './QueryLexer.js';
import MyGrammarParser from './QueryParser.js';
import MyGrammarListener from './QueryListener.js';

const input = "field = 123 AND items in (1,2,3)"
const chars = new antlr4.InputStream(input);
const lexer = new MyGrammarLexer(chars);
const tokens = new antlr4.CommonTokenStream(lexer);
const parser = new MyGrammarParser(tokens);
const tree = parser.MyQuery();
Очевидно, что это ситуация, подходящая для композиции функции, и я использую Lodash (fp).
Сначала я попробовал следующее:

Код: Выделить всё

// imports...
import _ from "lodash/fp.js";

const parse = _.compose([
_.invoke("MyQuery"),
MyGrammarParser,
antlr4.CommonTokenStream,
MyGrammarLexer,
antlr4.InputStream,
]);
Но это не удастся с TypeError: Class Constructor Ke не может быть вызван без 'new' .
Вставка нового on Каждая строка внутри _.compect (кроме _.invoke ) сбоя с TypeError: невозможно прочитать свойства неопределенного (чтение 'длины') при new Antlr4.inputStream . < /p>
Вместо этого я могу использовать вспомогательную функцию: < /p>

Код: Выделить всё

// imports...
import _ from "lodash/fp.js";

_.construct = Constructor => param => new Constructor(param);

const parse = _.compose([
_.invoke("MyQuery"),
_.construct(MyGrammarParser),
_.construct(antlr4.CommonTokenStream),
_.construct(MyGrammarLexer),
_.construct(antlr4.InputStream),
]);

const tree = parse("field = 123 AND items in (1,2,3)");
< /code>
Это работает, и IMO выглядит намного лучше, чем оригинал, но я хочу знать, есть ли способ написать это с помощью встроенных функций JavaScript или Lodash. Насколько я знаю, невозможно передать конструктор в качестве параметра, как если бы он был обычной функцией, следовательно, _.construct 
.
В итоге я хочу Чтобы пройти конструктор в качестве параметра, как если бы он был обычной функцией, не имея сначала обернуть его в вспомогательную функцию. Руководство, однако решением этого вопроса должно быть Lodash/antlr 4 независимо.

Подробнее здесь: https://stackoverflow.com/questions/794 ... in-javascr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Разница между кодом, созданным с использованием функции шаблона, и обычной функцией
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как десериализовать класс, у которого в качестве первого параметра конструктора имеется объект nlohmann::json?
    Anonymous » » в форуме C++
    0 Ответы
    84 Просмотры
    Последнее сообщение Anonymous
  • Добавьте массив объектов в качестве параметра конструктора
    Anonymous » » в форуме JAVA
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Добавьте массив объектов в качестве параметра конструктора
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Добавьте массив объектов в качестве параметра конструктора
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»