我有一个看起来像这样的ExtJs类:
Ext.define("RuleExecutor", {
singleton: true,
displayMessage: function(msg) {
Ext.Msg.alert('Popup Message', msg[0]);
},
disableById: function(field) {
Ext.getCmp(field).setDisabled(true);
},
//more functions are here...
});
现在我得到一个字符串=> str
,其中包含我需要运行的方法名称。我需要在str
正确调用该方法,但不传递参数。
像这样:
//arguments is an array
function RunRule(str, arguments) {
//I tried this....
var fn = RuleExecutor[str];
fn(arguments)
//This doesn't work either..
RuleExecutor[str].apply(this, arguments);
}
答案 0 :(得分:2)
不要将'arguments'用作变量名。在JavaScript中已经有一个类似于内置数组的对象,名为“arguments”。您的方法可能如下所示:
function RunRule(str) {
var slice = Array.prototype.slice,
args = slice.call(arguments, 1);
RuleExecutor[str].apply(RuleExecutor, args);
}
我使用了'真实'数组原型中的slice
方法。这一行:
args = slice.call(arguments, 1)
将除第一个之外的所有参数复制到args
变量。你可以这样打RunRule
:
RunRule("displayMessage", "Hello");
答案 1 :(得分:1)
这是你要找的吗?
Ext.onReady(function () {
Ext.define("RuleExecutor", {
singleton: true,
displayMessage: function (msg) {
Ext.Msg.alert('Popup Message', msg[0]);
},
disableById: function (field) {
Ext.getCmp(field).setDisabled(true);
}
});
var str = 'displayMessage';
RuleExecutor[str](['bar']);
});