JS ES6: Как предоставить дочерним методам доступ к своим братьям и сестрам? - PullRequest
1 голос
/ 28 сентября 2019

У меня есть несколько служебных методов, таких как

export const makeTextUtils = ({ U }) =>
  Object.freeze({
    hello: () => "Hello World!",
    lorem: () => "Lorem ipsum..."
  )};

, эти дочерние утилиты могут ссылаться друг на друга

export const makeOutputUtils = ({ U }) =>
  Object.freeze({
    logHello: () => console.log(U.txt.hello())
  )};

Теперь я хочу представить Utils в utils.js и внедрить родительский метод во всех дочерних элементах

import { makeTextUtils } from './text';
import { makeOutputUtils } from './output';

// dependency injections
const textUtils = makeTextUtils({ U });
const outputUtils = makeTextUtils({ U });

// building parent util method
export const U = Object.freeze({
  txt: textUtils,
  out: outputUtils
});

Я пробовал различные способы импорта U в верхней части основного файла и переключения порядка в файле, но, похоже, ничего не помогаетхитрость.

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 28 сентября 2019

Сначала объявите объект U сверху, чтобы вы могли передать его другим функциям.Затем, после того как U получает назначенные ему свойства, вы можете заморозить его:

import { makeTextUtils } from "./text";
import { makeOutputUtils } from "./output";

export const U = {};

// dependency injections
const textUtils = makeTextUtils({ U });
const outputUtils = makeOutputUtils({ U });

// building parent util method
Object.assign(U, {
  txt: textUtils,
  out: outputUtils
});
Object.freeze(U);

U.out.logHello();

https://codesandbox.io/s/happy-benz-cu3n5

Передача U внутри объекта и немедленная деструктуризация его в служебных функцияхкажется, ничего не делает - если только для этого нет особой причины, не стесняйтесь просто передавать объект U один (и использовать только параметр U).

...