【问题标题】:Is there a way that treat javascript function with dynamic name? [duplicate]有没有办法用动态名称处理 javascript 函数? [复制]
【发布时间】:2020-09-27 01:08:01
【问题描述】:

我想在我的 javascript 代码中像这段代码一样以动态方式使用函数。

const function1 = (param) => {
    return "AA" + param
}
const function2 = (param) => {
    return "BB" + param
}
const function3 = (param) => {
    return "CC" + param
}

for (let i=1; i < 4; i++) {
    // call function1, 2, 3 with i
} 

我在python中也看到过类似这样的案例。

note1 = "note1"
note2 = "note2"
note3 = "note3"

for i in range(1, 4):
    print(vars()[f"note{i}"])

像这个python案例,有没有办法用动态名称处理javascript变量或函数?

【问题讨论】:

  • 使它们成为对象的属性,所以myObj['1'] = param =&gt; {...} 然后myObj[i]()

标签: javascript python function variables ecmascript-6


【解决方案1】:

你可以这样做:

在任何函数之外创建的任何函数,在非严格模式下,都会进入默认this(窗口)。因此,您可以使用window[ propertyName ] 访问它。但是,污染窗口对象是一种不好的做法。因此,更好的选择是将这些函数包装在自定义对象中,然后使用相同的语法来访问函数。

const function1 = (param) => {
    return "AA" + param
}
const function2 = (param) => {
    return "BB" + param
}
const function3 = (param) => {
    return "CC" + param
}


for (let i=1; i < 4; i++) {
    window[`function${i}`](i);
}

参考:

【讨论】:

  • 将属性流血到窗口是一种不好的做法
  • 是的,这在技术上肯定实现了既定目标,但如果可以使用自定义包装对象而不是窗口对象,则更喜欢。
  • 如果我们在任何其他上下文中定义函数,那么我们可以使用那个而不是window
  • @Rajesh neulhan 只是询问可能性,因为似乎所有函数都在全局上下文中,所以你只有这个选项。
  • @Rajesh 据我了解,您可以使用Function 创建一个新函数,并且该函数将始终在全局上下文中创建函数。
猜你喜欢
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
相关资源
最近更新 更多