从函数参数生成对象
Build object from function parameters
我经常发现自己在写这样的代码:
function handleSomeEvent(p1, p2, p3) {
var data = { p1: p1, p2: p2, p3: p3 };
//Or any other function that takes an object
$.ajax('/url', { data: data, ... });
}
有没有一种方法可以让我从函数的参数中自动构建data
对象?
我知道我可以传入一个对象,但有时传入多个参数更方便(例如与遗留代码集成,或项目现有的编码风格)。
我会使用javascript中的arguments对象来实现这一点。每个函数都有一个参数数组,可以按如下方式枚举。
var data = {};
for(var i=0; i<arguments.length; i++) {
data["var" + i] = arguments[i];
}
基于@HaukurHaf的链接,我将其整合在一起(使用Underscore.js):
var STRIP_COMMENTS = /(('/'/.*$)|('/'*['s'S]*?'*'/))/mg;
function getParamMap(func, funcArgs) {
var fnStr = func.toString().replace(STRIP_COMMENTS, '')
var names = fnStr.slice(fnStr.indexOf('(')+1, fnStr.indexOf(')')).match(/([^'s,]+)/g)
if(names === null)
names = []
args = Array.prototype.slice.call(funcArgs);
return _.object(_.zip(names, args));
}
function example(a, b, c, d) {
return getParamMap(example, arguments);
}
console.log(example(1,2,3, "hello"));
// -> Object {a: 1, b: 2, c: 3, d: "hello"}
http://jsfiddle.net/rGtu7/2
适用于Chrome、Firefox和IE11,但我真的希望有一个更优雅的解决方案。如果Javscript支持对参数名称进行反射,那就太酷了。
ES2015简写对象文字减少了一些重复:
function handleSomeEvent(a, b, c) {
console.log({ a, b, c })
}
相关文章:
- JS for循环来设置HTML对象参数
- 如何在使用javascript加载页面时直接设置对象参数
- 如何将对象参数传递给事件处理程序
- 在ng重复中剪切对象参数的字符串长度
- 在新对象参数中使用“this”选择器
- 在 javascript 中通过引用传递一个对象参数
- 为什么 Javascript 中的参数在使用 console.log 时返回 [对象参数]
- 如何使用 javascript 访问在函数中传递的对象参数
- 在哪里可以获得有关 JavaScript 函数的对象参数语法的信息
- JavaScript 对象参数在通过网络读取时更改
- 我正在寻找一种智能方法来检查传递给函数的对象参数
- 使用来自另一个函数的对象参数调用函数
- Javascript中的对象参数,以及我们应该如何命名它们
- Jquery 在 Firefox 中的自定义对象参数(动态导航加载动态内容)
- 有效记忆对象参数
- AngularJS v1.2.x $digest() 无限循环指令隔离范围对象参数
- 在 Jasmine 中执行有关对象参数的断言
- Jquery - 编辑对象参数
- 检查对象参数是否具有所有必需属性的最有效方法是什么
- Javascript对象参数的分配和使用