将字符串转换为输出字符串的方法

时间:2015-05-27 09:56:58

标签: javascript

我有一个这样的对象:

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

2 个答案:

答案 0 :(得分:2)

这是一个潜在的解决方案。迭代options的键并构建一个新对象:

var newOptions = Object.keys(options).reduce(function ( obj, option ) {
  obj[ option ] = function () {
    this.insertHTML(options[ option ]);
  };
  return obj;
}, {});

请注意,这些函数中的this不太可能引用您的预期,除非您使用其他显式上下文调用这些函数(例如,通过callapply )。

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