【问题标题】:Call a javascript class object with variable [duplicate]调用带有变量的javascript类对象[重复]
【发布时间】:2020-11-09 13:00:51
【问题描述】:

我是面向对象的 Javascript 的新手,并创建了一个名为 Foo 的对象(基于一个类)和一个名为按钮的对象。要调用按钮,我可以键入

console.log('foo log: ',foo.buttons)
//foo log:  testButton1

我想通过将 foo 替换为名为 myVar 的变量来替换 call foo.buttons。它必须很简单,但我能看到的解决方案似乎都不适用于我的情况。我认为可能存在范围问题,但不明白它是什么。

我已经尝试过什么

class TestClass {
  constructor(
    button)
    {this.button = button}
}

const myVar = 'foo'
const foo = new TestClass ('testButton1')

console.log('foo log: ', foo.button)
//foo log:  testButton1

console.log('myVar: ', myVar)
//foo




console.log('Attempt1: ', [myVar].button)
//Attempt1:  undefined

//console.log('Attempt2: ', [myVar]button)
//     failed to compile

console.log('Attempt3: ', myVar.button)
//Attempt3:  undefined

console.log('Attempt4: ', (myVar).button)
//Attempt4:  undefined

console.log('this:', this)

【问题讨论】:

  • "我想通过将 foo 替换为名为 myVar 的变量来替换 call foo.buttons" - 为什么?
  • 如果您使用var 将其声明为全局变量,您可以使用window[myVar]。只要您的范围是 window 或任何您指定的范围。
  • 我有一个来自另一个组件的道具,我希望使用该道具 myVar 来查找与其相关的对象,以便稍后在程序中使用它
  • 不知道是谁关闭的,所以无法给出正确答案。在我看来,最好的方法是绘制你的案例。类似:const options = { foo: new TestClass('testButton1'), bar: new TestClass('testButton2'), baz: new TestClass('testButton3') } 。然后你用options[myVar].button得到它

标签: javascript object scope


【解决方案1】:

您可以使用eval,但这可能很危险。

class TestClass {
  constructor(
    button)
    {this.button = button}
}

const myVar = 'foo'
const foo = new TestClass ('testButton1')

console.log(eval(myVar).button)

【讨论】:

  • 谢谢!我查看了 eval ,它说使用字符串调用对象是一个坏主意。这会让我暂时度过难关,但我会考虑实现我的目标的替代方案。谢谢
猜你喜欢
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多