Wal*_*tzy 5 javascript string casting function
我已经做了一些谷歌搜索,但这个特殊的问题有点类似于"我如何评估字符串中的函数名称"所以我找不到解决方案,我想将字符串转换为函数所以说我有类似的东西:
for (var i = 0; i < someNumber ; i++) {
var foo = "function() { someObject.someOtherFunctionCall(" + i + ") }";
someArray[i] = foo;
}
Run Code Online (Sandbox Code Playgroud)
我怎么会强迫foo所以我可以打电话
someArray[0]();
Run Code Online (Sandbox Code Playgroud)
我需要把功能,任何想法加入到价值中吗?
编辑:我只是为"混乱"代替"我"道歉
更新:
好的,我接受了icktoofay的回答,因为它有效,回答了你的大部分问题和疑虑; 我已经尝试了大多数建议的方法,其中所有方法都没有将变量传递给调用位置范围或者需要使用最后一个函数变量值持久化的闭包,遗憾的是我无法控制其余的代码所以我无法修改函数最终被调用的位置.
这可能是一个临时解决方案; 我知道函数的解析字符串是多么丑陋.就浏览器兼容性而言,这只会在一个环境中运行,所以我认为我们在那里非常安全.
无论如何,再次感谢您的回答和讨论.
如果您只需要一个简单地调用方法的函数数组,那就简单得多:
for(var i=0; i<someNumber; i++) {
someArray.push(someObject.someOtherFunctionCall.bind(someObject, i));
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是必填项Function.bind,在较旧的浏览器中可能不可用。如果您需要对旧版浏览器的支持,则可以对其进行填充或使用以下版本:
for(var i=0; i<someNumber; i++) {
someArray.push(function(i) {
return function() {
return someObject.someOtherFunctionCall(i);
};
}(i));
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是旧的答案,它也应该起作用,但不太优雅:
for (var i = 0; i < someNumber ; i++) {
var foo = new Function("someObject", "return function() { someObject.someOtherFunctionCall(" + value + ") }")(someObject);
someArray[i] = foo;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |