javascript - 在对象本身中引用对象变量名

标签 javascript ecmascript-6

是否可以在对象本身中引用对象变量声明的名称? 像这样的东西:

const foo = {
  bar: `${MAGICTHIS}-bar`,
}

console.log(foo.bar); //foo-bar

编辑:

我正在编写一个动态函数,用于将我所有的 css 类名重写为对象中的 BEM。我这样做是为了能够在我的应用程序中一次性管理它们。没有这个功能是这样的:

export const button = {
  btn: 'button',
  btnSm: 'button--small',
  btn2: 'button--secondary',

export const alert = { 
  alert: 'alert',
  alertDanger: 'alert--danger',
//etc
}

它们在不同的对象中是分开的,因为我想隔离使用。 我想优化它,因为我会经常这样做。这就是为什么我要尝试编写一个“bemmify”函数。所以我可以这样做:

export const button = {
  btn: bemmify(),
  btnSm: bemmify('small'),
  btn2: bemmify('secondary'),

export const alert = { 
  alert: bemmify(),
  alertDanger: bemmify('danger'),
//etc
}

并且与上面的对象有相同的结果。 当然,我总是可以将“base”作为第一个参数传递 (bemmify('button', 'small')) 但我开始怀疑是否可以让我的 bemmify 函数如此智能它可以识别它所在的对象的名称。

最佳答案

每当您发现自己在编写变量名很重要的代码时,您通常应该使用变量名作为键的对象。所以你应该有一个像这样的对象:

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.buttonbem_data.alert

关于javascript - 在对象本身中引用对象变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56117374/

相关文章:

Javascript 'this' 返回未定义的内部对象

javascript - jQuery点击事件触发$.confirm堆叠事件

javascript - 如何匹配两个相邻的字符并替换它们,而不必匹配所有排列?

javascript - Angular js - 未添加对服务的 PUT 请求的 URL

javascript - Bloom Filter 哈希返回太多的冲突

reactjs - 在 React 中获取文档的高度

javascript - 使用高速公路 python 发送 json

javascript - UseEffect 被多次调用

javascript - 将可迭代元素或不可迭代元素扩展为数组而不检查元素 .length

javascript - 构造函数中的范围错误 (ES6)