1

我有一个像这样的 dojo 定义函数

define([
    // some param
]),function(foo, bar, baz, fooz, ...){
    return{
        // some custom code
    }
}

我想动态访问我的函数 args(foo, bar, ...)

我知道我可以把它包装成 var

foo : foo

并使用

this[objectToCall].methodToRun();

在这个例子中,调用应该是

this.run('foo');

function run(objectToCall){ // foo    
    this[objectToCall].methodToRun(); // refer to foo
}

有没有办法在不将其包装成 var 的情况下实现这一点?

提前谢谢

编辑 :

更进一步,我可以使用arguments关键字。

function(foo, bar, baz, fooz, ...){
    var functionArguments = arguments;
    return{
        // some custom code
    }
}

但我无法访问 foo 对象functionArguments['foo']

4

2 回答 2

0

您似乎正在尝试使用类似于接口定义的“methodToRun”函数。

当您说想要动态选择正确的对象时,听起来您将对象存储在代码中某处的某个 var 中(例如:var selectedObject = foo;)

作为动态的,您应该能够使用 selectedObject.methodToRun(); 调用对象上的方法;

(但现在由您决定只提供实际上实现“methodToRun”的对象,否则您将收到“对象不支持此方法”错误。)

于 2012-05-22T08:31:27.373 回答
0

找到了解决方案:

function(method){
    var len = functionArguments.length;
    for(var i = 0; i < len; i ++){
        if(typeof functionArguments[i] === "object")
            if(functionArguments[i].name == method)
                functionArguments[i].test();
            }

并在我的对象定义中添加了一个名称参数

于 2012-05-22T08:56:42.587 回答