Javascript JS–;将this.property(event.target.property)链接到变量名(不带eval())

Javascript JS–;将this.property(event.target.property)链接到变量名(不带eval()),javascript,validation,variables,eval,dry,Javascript,Validation,Variables,Eval,Dry,我正在为一个简单的客户端表单验证编写代码。我正在尝试使用验证过程中使用的属性和值(对于每个单独的输入)创建对象,然后将它们附加到输入节点 我试图找到一种方法,将这些对象自动配对到各自的输入。在下面的代码中,我找到了一种方法来实现这一点,但使用eval()函数是有代价的,我宁愿避免使用它。在JS中是否还有其他方法可以做到这一点 <label class="c-contact-form__label" for="your_name">Your Name *</label> &

我正在为一个简单的客户端表单验证编写代码。我正在尝试使用验证过程中使用的属性和值(对于每个单独的输入)创建对象,然后将它们附加到输入节点

我试图找到一种方法,将这些对象自动配对到各自的输入。在下面的代码中,我找到了一种方法来实现这一点,但使用eval()函数是有代价的,我宁愿避免使用它。在JS中是否还有其他方法可以做到这一点

<label class="c-contact-form__label" for="your_name">Your Name *</label>
<input class="" type="text" name="your_name" maxlength="50" size="30">    

我在谷歌上搜索了一个解决方案,我已经阅读了可能的上下文[varName]解决方案,但它似乎不起作用(或者我不明白)

您可以使用eval()或context[varName]。上下文可以是带有var、const或let的变量,如果您需要它是全局的,也可以直接使用window[varName]。

问题是原始代码被包装在IIFE中。因此–AFAIK–不能使用括号表示法访问它,因为它不存在于全局范围中,并且对象本身没有父对象

const foo = (() => {
  let bar = 'obj';
  const obj = {
    // not accessible by [var]whatever. AFAIK
    whatever: 'bar',
  } 
  console.log([bar].whatever); // undefined
})();
我通过将一个对象包装成父对象来解决这个问题:

const foo = (() => {
  let bar = 'obj';
  const parent = {
    //now accessible by parent[bar].
    obj: {
      whatever: 'bar',
    }
  }
  console.log(parent[bar].whatever); // bar
})();

可能是重复的谢谢。我在这里读过类似的问题,但我可能没有得到上下文[varName]解决方案。
this[name]
this['name']
在最后一行返回
undefined
const foo = (() => {
  let bar = 'obj';
  const parent = {
    //now accessible by parent[bar].
    obj: {
      whatever: 'bar',
    }
  }
  console.log(parent[bar].whatever); // bar
})();