我在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;
}
我知道有更简单的方法来访问多数组/对象,但像这样的硬编码函数是迄今为止最快的,因为没有变量替换。谢谢。
答案 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;