JS中的函数编写函数

时间:2015-05-01 04:06:47

标签: javascript functional-programming hardcode

我在JS中有函数,由于某种原因必须硬编码。如何创建编写此硬编码函数的函数?这是我的榜样;假设obj是一个多数组/ JSON对象:

function foo2(obj) {
    var t = obj["key1"];
    t = t["key2"];
    return t;
}

function fooN(obj) {
    var t = obj["key1"];
    t = t["key2"];
    ...//more goes here
    t = t["keyN"];
    return t;
}

我知道有更简单的方法来访问多数组/对象,但像这样的硬编码函数是迄今为止最快的,因为没有变量替换。谢谢。

2 个答案:

答案 0 :(得分:1)

我不提倡它,但是你可以这样做:

function defineAccessor(propArray) {
  var accessors = propArray.join('.');
  return new Function('obj', 'return obj.' + accessors);
}
var x = { key1: { key2: 3 } };
var foo2 = defineAccessor(['key1', 'key2']);
alert(foo2(x)); // alerts 3

答案 1 :(得分:0)

似乎有些奇怪的要求,但可能的解决方案是使用window将功能添加到window['foo' + number]

此解决方案中的主要棘手位是中间的闭包,确保使用i的正确值。这是通过调用一个以i作为arg并返回一个函数的函数来完成的。



var N = 5;

fooX = function(obj, x) {
  var t = obj["key" + 1];
  for (var i = 2; i <= x; i++) {
    t = t["key" + i];
  }
  return t;
}

for (var i = 1; i <= N; i++) {
  window['foo' + i] = (function(x) {
    return function(obj) {
      return fooX(obj, x);
    }
  })(i);
}


var obj = {
  key1: {
    key2: {
      key3: {
        key4: {
          key5: 5
        }
      }
    }
  }
}

var message = "Results:<br>" +
  "foo1(obj) = " + foo1(obj) + "<br>" +
  "foo2(obj) = " + foo2(obj) + "<br>" +
  "foo3(obj) = " + foo3(obj) + "<br>" +
  "foo4(obj) = " + foo4(obj) + "<br>" +
  "foo5(obj) = " + foo5(obj);

document.body.innerHTML = message;
&#13;
&#13;
&#13;