调用名称存储在变量中的函数
Call a function whose name is stored in a variable
我有以下脚本:
(function () {
var Module = (function () {
var fctToCall = function () {
alert('Foo');
};
return {
fctToCall: fctToCall
};
})();
var Module2 = (function () {
var init = function () {
var str = 'fctToCall';
Module.str(); // here
};
return {
init: init
};
})();
})();
所以我想直呼这个fctToCall
方法的名字——我该怎么做?到目前为止,我知道3种方法:
- 通过将函数附加到窗口对象,但它不会是局部的并且处于关闭状态,并且我无法访问其他局部变量
- eval,在我看来是最好的选择,但它仍然是eval,所以我不想使用它
- 这个,但它是另一种架构,我不想改变它
我该如何解决这个问题?
要调用函数,请使用
Module[str]();
由于Module
是一个对象,您可以使用括号表示法访问它的动态属性和方法。
(function() {
var Module = (function() {
var fctToCall = function() {
console.log('Foo');
};
return {
fctToCall: fctToCall
};
})();
var Module2 = (function() {
var init = function() {
var str = 'fctToCall';
// Call as
Module[str]();
};
return {
init: init
};
})();
Module2.init();
})();
替换:
var init = function () {
var str = 'fctToCall';
Module.str(); // here
};
带有:
var init = function () {
var str = 'fctToCall';
Module[str](); // here
};
这里,str
被用作访问Module
上的fctToCall
功能的密钥。
然后,您可以在IIFE:中致电Module2.init()
(function() {
var Module = (function() {
var fctToCall = function() {
document.write('Foo'); // (alert is broken in snippets)
};
return {
fctToCall: fctToCall
};
})();
var Module2 = (function() {
var init = function() {
var str = 'fctToCall';
Module[str](); // Access & call `fctToCall`.
};
return {
init: init
};
})();
Module2.init(); // Call `init`.
})();
由于JS中的所有内容都是对象,因此可以使用对象表示法。
Module[str]();
您可以调用如下函数:
Module[str]();
相关文章:
- 访问嵌套函数结构中的JavaScript父函数变量
- Javascript函数变量传递语法问题
- JavaScript 函数变量范围问题
- 在 promise 中获取构造函数变量
- 将函数结果传递给Javascript中的另一个函数变量
- 用对象设置函数变量's值
- Javascript函数变量应生成错误,而不是未定义的错误
- 我可以访问用户脚本中的匿名函数变量吗?
- 在实例化期间使用构造函数变量
- 为什么在 JavaScript 中不能用函数变量覆盖字符串变量
- JavaScript 允许调用函数访问调用函数变量
- 如何在嵌套原型中访问 JavaScript 构造函数变量
- 对函数变量的 JavaScript 控制台日志输出感到困惑
- 如何将函数变量传递给主干模型上的 jQuery 事件
- 如何访问构造函数变量
- 实例函数变量不会更改
- 为什么函数变量在变量之后是未定义的
- 用内部函数变量更改外部函数变量?Javascript
- Javascript - 使用闭包递增静态函数变量模拟
- 异步 JavaScript 静态函数变量