假设我有一个包含不同选项的数组:
exports.options = [
["big_house", { width: 260 , length: 140 }],
["small_house", { width: 36 , length: 90 }]
...
];
如何为每个option
导出功能动态创建? (例如,他们应该看起来像这些):
exports.big_house = function(extra_width, extra_length){
build(260, 140, extra_width, extra_length);
};
exports.small_house = function(extra_width, extra_length){
build(36, 90, extra_width, extra_length);
};
我的尝试从:this.options.forEach(function(option){..
开始,但为了让String
转换为接受两个参数的函数名,我经常失败。
谢谢!
答案 0 :(得分:1)
您可以使用括号语法通过包含其名称的变量引用函数。例如:
exports.options.forEach(function(v) {
var fnName = v[0];
var width = v[1].width;
var length = v[1].length;
exports[fnName] = function(extra_width, extra_length) {
build(width, length, extra_width, extra_length);
};
});
答案 1 :(得分:1)
您可以为每个单独的键公开一个对象,并且该对象中的一个项可以是一个函数:
exports.options = {
big_house: { width: 260, length: 140, build: function(extra_width, extra_length) {
return build(this.width, this.length, extra_width, extra_length);
}},
small_house: { width: 36, length: 90, build: function(extra_width, extra_length) {
return build(this.width, this.length, extra_width, extra_length);
}},
}
然后,当你使用它时,你可以这样做:
var items = require('builder');
items.big_house.build(10, 20);
实际上,在实现中,您甚至可以使用常用功能:
function _build(extra_width, extra_length) {
return build(this.width, this.length, extra_width, extra_length);
}
exports.options = {
big_house: {width: 260, length: 140, build: _build},
small_house: {width: 36, length: 90, build: _build},
}
要获取选项列表,您可以使用Object.keys()
:
var b = require('builder');
var items = Object.keys(b.options);
您可以使用特定方法来检索项目列表。