我有一个这样的对象:
options: {
'Signature': "[Customer First Name] [Customer Last Name]"
'First Name': "[Customer First Name]"
'Last Name': "[Customer Last Name]"
}
我需要转换它,以便值成为使用该值的函数,如下所示:
options: {
'Signature': function(){ this.insertHTML('[Customer First Name][Customer Last Name]'); }
'First Name': function(){ this.insertHTML('[Customer First Name]'); }
'Last Name': function(){ this.insertHTML('[Customer Last Name]'); }
}
但我不知道该怎么做。举个例子,我希望能够做到这样的事情:
var newOptions = functionify(options);
答案 0 :(得分:2)
这是一个潜在的解决方案。迭代options
的键并构建一个新对象:
var newOptions = Object.keys(options).reduce(function ( obj, option ) {
obj[ option ] = function () {
this.insertHTML(options[ option ]);
};
return obj;
}, {});
请注意,这些函数中的this
不太可能引用您的预期,除非您使用其他显式上下文调用这些函数(例如,通过call
或apply
)。
答案 1 :(得分:1)
在JavaScript中,可以创建返回函数的函数。
例如:
function functionify(str) {
return function() {
return str; // Or whatever you want in your function body.
};
}
因此,通过调用functionify
并将一些字符串传递给它,您将获得一个返回该字符串的函数:
var fun = functionify('Hello, World!'); // fun is now a function
fun(); // returns "Hello, World!"
这可以通过多种方式应用于对象的键和值(取决于您的偏好; for-in循环,Object.keys
来命名一对)。
另一个例子:
obj['key'] = functionify(obj['key']);
obj['key']();