我创建了一个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
}
*/
我希望将这两个函数分开,因为我希望能够在不同的实例中引用它们,但同时也要同时评估它们以获得所需的输出。
提前感谢您的帮助!
答案 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)
将返回您希望的结果。
您还可以做一些更高级的事情,例如列出您希望为结果运行的方法名称:
...
doThese: function (methods, args) {
var result = {};
methods.forEach(function (m) {
result[m] = this[m](args);
}, this);
return result;
}
...
您可以使用myObject.doThese(['doSomething', 'doSomethingElse'], args)
调用此内容。
我建议你不在对象上运行所有方法(就像其他答案所示)。一开始似乎更容易,但会使您的对象难以修改并在将来导致意外行为。