Javascript Newb:如何将var实例化为“blah.1”和“blah.2”?

时间:2012-06-28 21:39:09

标签: javascript

我目前有一个像这样定义一些变量的块

var slider_1  = document.querySelector('#slider_1');
var slider_2  = document.querySelector('#slider_2');
...

和func这样的ID是这样的:

function updateFromInput(id){               
    if(id==1){
        var x = input_1.value*1;
        x = Math.round((x*ratio)-offset);     
        slider_1.x.baseVal.value =  x/scale;
    }else if(id==2){
        var x = input_2.value*1;
        x = Math.round((x*ratio)-offset); 
        slider_2.x.baseVal.value =  x/scale;
    }
};

我想重构一下。
我想如果可以的话,用点来实例化我的变量而不是像

这样的下划线
var slider.1  = document.querySelector('#slider_1');
var slider.2  = document.querySelector('#slider_2');

然后我就能更好地利用已经传递到我的功能中的ID并消除大量的重复。
我希望通过slider.id.x.baseVal.value = x/scale;的单个调用来简化我的函数,而不必在每个的IF / ELSE条件中使用该代码。

当我尝试这个时,我收到一条错误,上面写着“ Uncaught SyntaxError:Unexpected number ”。
应该如何这样做?

2 个答案:

答案 0 :(得分:4)

您不能在对象中使用普通数字键。

你可以这样做:

var slider = {};  // or = [], if array syntax is more appropriate
slider[1] = ...
slider[2] = ...

此外,如果密钥实际上是变量而不是文字标记,则不允许使用您建议的语法。

在您的示例中,slider.id实际上是指具有文字 id的对象,而不是变量 id发生的任何值拥有。

你必须把变量放在方括号内,即slider[id],这样你的函数就会写成:

function updateFromInput(id){               
    var x = +input[id].value;
    x = Math.round((x*ratio)-offset);     
    slider[id].x.baseVal.value =  x/scale;
};

答案 1 :(得分:1)

你做不到。 .是变量标识符的无效字符。

您可以在对象属性中使用它。

var sliders = {
    "slider.1": document.querySelector('#slider_1'),
    "slider.2": document.querySelector('#slider_2')
};

然后使用成员运算符的方括号版本来访问该属性。

alert( sliders["slider.1"].id );