动态出口

时间:2015-06-09 22:51:19

标签: javascript node.js

假设我有一个包含不同选项的数组:

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转换为接受两个参数的函数名,我经常失败。

谢谢!

2 个答案:

答案 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);

您可以使用特定方法来检索项目列表。