1

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

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

带有 ID 的 func 是这样的:

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 ”。这应该
怎么做?

4

2 回答 2

4

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

不过,您可以这样做:

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

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

在您的示例slider.id中,实际上是指具有文字key的对象,而不是 变量碰巧具有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;
};
于 2012-06-28T21:40:32.403 回答
1

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

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

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

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

alert( sliders["slider.1"].id );
于 2012-06-28T21:40:42.310 回答