Имя переменной ссылочного объекта внутри самого объекта

Можно ли ссылаться на имя объявления переменной объекта внутри самого объекта? Что-то вроде:

const foo = { bar: `${MAGICTHIS}-bar`, } console.log(foo.bar); //foo-bar 

РЕДАКТИРОВАТЬ:

Я пишу динамическую функцию для перезаписи всех моих имен классов CSS в БЭМ в объекте. Я делаю это, чтобы иметь возможность управлять ими в одном месте через мое приложение. Без функции это так:

 export const button = { btn: 'button', btnSm: 'button--small', btn2: 'button--secondary', export const alert = { alert: 'alert', alertDanger: 'alert--danger', //etc } 

Они разделены на разные объекты, потому что я хочу изолировать использование. Я хотел оптимизировать это, так как я буду делать это много. Вот почему я пытаюсь написать функцию «ошеломить». Так что я могу сделать это:

 export const button = { btn: bemmify(), btnSm: bemmify('small'), btn2: bemmify('secondary'), export const alert = { alert: bemmify(), alertDanger: bemmify('danger'), //etc } 

И имеют тот же результат, что и объекты выше. Конечно, я всегда мог передать «базу» в качестве первого параметра ( bemmify('button', 'small') ), но я начал задумываться, можно ли было позволить моей функции bemmify быть настолько умной, чтобы она могла распознавать имя объект, в котором он находится.

Всего 1 ответ


Всякий раз, когда вы обнаруживаете, что пишете код, в котором имена переменных значимы, вы, как правило, должны использовать объект, в котором имена переменных являются ключами. Таким образом, вы должны иметь такой объект, как:

const bem_data = {
  button: {
    btn: 'button',
    btnSm: 'button--small',
    btn2: 'button--secondary',
  },
  alert: {
    alert: 'alert',
    alertDanger: 'alert--danger',
  }
}

Затем вы можете использовать функцию для создания каждого элемента:

 function add_element(data, key, prefix, additional) { const obj = { [prefix]: key }; Object.entries(additional).forEach(([ keySuffix, valSuffix ]) => obj[prefix + keySuffix] = `${key}--${valSuffix}`); data[key] = obj; } const bem_data = {}; add_element(bem_data, "button", "btn", { Sm: "small", "2": "secondary" }); add_element(bem_data, "alert", "alert", { Danger: "danger" }); console.log(bem_data); 

Затем вы экспортируете bem_data и используете bem_data.button , bem_data.alert и т. Д.


Есть идеи?

10000