可能重复:
如何在javascript中动态访问本地范围?
大家好.
我们都知道您可以使用[]语法通过它的名称访问javascript对象的属性.例如ob ['nameOfProperty'].
你能为局部变量做同样的事吗?这里的另一个答案表明答案是使用window ['nameOfVar'].然而,这只适用于海报,因为他在窗口级范围内定义变量.
我认为这通常是可能的,因为Firefox的Firebug(我认为是用javascript编写的)可以显示本地和闭包变量.是否有一些我不知道的隐藏语言功能?
具体来说,这就是我想要做的事情:
var i = 4;
console.log(window['i']); // this works..
function Func(){
var j = 99;
// try to output the value of j from its name as a string
console.log(window['j']); // unsurprisingly, this doesn't work
}
Func();
Run Code Online (Sandbox Code Playgroud) 我有一些看起来像这样的代码:
function StrippedExample(i1, i2, i3, i4, i5, i6, i7, i8) {
this.i = [];
for (var i=1,j=0 ;i<9;i++) {
var k = eval("i"+i);
if (k > 0) {
this.i[j++] = k;
}
}
}
Run Code Online (Sandbox Code Playgroud)
FireBug profiler声称第二个最长的函数是eval(),占运行时间的近6%.
每个人都说eval是EVIL(就像糟糕的那样)而且很慢(正如我所发现的那样),但我真的无法做任何事情 - 服务器只是将数据从数据库中拉出来并推送到浏览器.
我有什么替代品?我可以像在服务器上做的那样做,但这只会将负担转移到链条上方.我无法更改数据库布局,因为所有内容都挂钩到这8个变量,这是一项艰巨的任务.
这样我就可以有一个函数说what_way_you_do_this = something.这可能吗?基本上我可以通过给它一个包含变量名称的字符串来告诉函数我想要设置哪个变量.
谢谢
基本上这是一个如何访问本地范围处理程序的问题.我试图为全局变量定义实现类似的东西,如:
window['newObject'] = "some string";
alert(newObject);
Run Code Online (Sandbox Code Playgroud)
但对于当地范围.现在我只有解决方案是使用evals:
eval("var newObject='some string'");
Run Code Online (Sandbox Code Playgroud)
但这是一个非常丑陋的解决方案......最好的方法就是在window []解决方案中使用一些本地范围的引用,但我从来没有听说过任何对本地范围的引用......有什么想法吗?
示例如下:
function x(arg)
{
localScope[arg.name]=arg.value;
alert(sex);
}
x({name:"sex", value:"Male"});
Run Code Online (Sandbox Code Playgroud) 全局var的工作示例:
var example_var = 'global var example';
var x = function(){
var var_name = 'example_var';
alert('Global var value is: ' + window[var_name]);
}
我如何用局部变量做同样的事情?像这样(不是工作示例):
var x = function(){
var example_var = 'Local var example';
var var_name = 'example_var';
alert('Local var value is: ' + window[var_name]);
}
可能重复:
有没有办法使用包含变量名称的字符串访问javascript变量?
JavaScript:通过名称字符串动态获取局部变量
一个简单的代码来说明我的问题 -
var chat_1 = "one";
var chat_2 = "two";
var id = "1";
var new = ?? variabalize( 'chat_' + id )
Run Code Online (Sandbox Code Playgroud)
我希望变量new赋值变量 - chat_1是"one"
我想创建一些仪表,但我的Gauge对象仍未定义.
var doesntwork;
function create_gauge(name, id, min, max, title, label) {
name = new JustGage({
id: id,
value: 0,
min: min,
max: max,
donut: false,
gaugeWidthScale: 0.3,
counter: true,
hideInnerShadow: true,
title: title,
label: label,
decimals: 2
});
}
create_gauge(doesntwork, "g2", 0, 100, "Füllstand", "%");
console.log(doesntwork); //undefined
Run Code Online (Sandbox Code Playgroud)
为什么?我不能将变量传递给函数?