评估Javascript对象中的所有函数

时间:2014-07-22 15:45:45

标签: javascript object

我创建了一个Javascript对象,其布局如下:

var myObject : {    
     doSomething : function (args) {
         //do some stuff
         return result;
     }

     //note the args for both functions are of the same format
     doSomethingElse : function (args){
         //do some other stuff
         return otherResult
     }            
}

现在我想实现以下目标,但我不确定如何以干净的方式进行:

console.log(myObject(args));

/*
Output:
    {
         doSomething : result,
         doSomethingElse : otherResult
    }
*/

我希望将这两个函数分开,因为我希望能够在不同的实例中引用它们,但同时也要同时评估它们以获得所需的输出。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

我想象你必须迭代,比如:

var results = {},
    args = "some args";

for (var key in myObject) {
    if (typeof myObject[key] === "function") results[key] = myObject[key](args);
}

console.log(results); //should be the output you want (untested)

答案 1 :(得分:2)

再添加一个调用两个方法的方法(传递参数)并返回所需的对象输出。这样的事情可以做到:

     ...
     doBoth: function (args) {
         return {
             doSomething: this.doSomething(args),
             doSomethingElse: this.doSomethingElse(args)
         };
     }
     ...

调用myObject.doBoth(args)将返回您希望的结果。

jsFiddle Demo


您还可以做一些更高级的事情,例如列出您希望为结果运行的方法名称:

     ...
     doThese: function (methods, args) {
         var result = {};
         methods.forEach(function (m) {
             result[m] = this[m](args);
         }, this);
         return result;
     }
     ...

您可以使用myObject.doThese(['doSomething', 'doSomethingElse'], args)调用此内容。

jsFiddle Demo


我建议你在对象上运行所有方法(就像其他答案所示)。一开始似乎更容易,但会使您的对象难以修改并在将来导致意外行为。