是否可以引用变量

问题描述 投票:0回答:4

我有一个大约有 30 个“值”的对象,或者无论它们被称为什么,例如:

var list = new Object();
list.one = 0;
list.two = 0;
list.three = 0;
...
list.thirty = 0;

有没有一种简单/有效的方法可以增加列表对象的值?

例如,假设有 100 个按钮,每个按钮按下都会增加一定量的值。我想做的是一个简短的函数,例如:

function test( value, amount, math ) {
   if( math === "add" ) {
   value += amount;
   } else if( math === "sub" ) {
   value -= amount;
   }
}

然而,整个价值的东西并不起作用。我能想到的唯一另一种方法是创建 30 个函数,每个函数都执行与上面相同的操作,但每个函数都指定要添加或减去的列表值,或者使用 if value === "one 创建一个函数“然后列出一个等等。还有其他想法吗?我考虑过使用数组,但我更希望代码易于阅读,因为列表值具有特定的名称,可以让我在其他函数中轻松使用。

javascript
4个回答
5
投票

尝试这样的事情:

function inc(value,amount) {
  list[value] += amount;
}

1
投票

是否可以引用变量?

不。但可以引用一个对象,并使用变量属性名称。这实际上是您已经拥有的,所以您可以将您的功能更改为

function test( value, amount, math ) {
    if( math === "add" ) {
        list[value] += amount;
    } else if( math === "sub" ) {
        list[value] -= amount;
    }
}

并用

test("one", 100, "add")
而不是
test(list.one, 100, "add")
来调用它。顺便说一句,我建议只使用负值而不是
add/sub
动词。


1
投票

您可以按字符串形式的名称访问属性:

function test(obj, name, amount, math) {
  switch (math) {
    case "add":
      obj[name] += amount;
      break;
    case "sub":
      obj[name] -= amount;
      break;
  }
}

例如使用以下方式调用它:

test(list, "one", 1, "add");

1
投票
list[value] += amount;

其中 value 是一个字符串,如“one”、“two”等

你也可以传入对象来递增:

function(obj, value, amount, math) {
  obj[value] += math;
}

但是你可能应该使用数组+循环/重构。

© www.soinside.com 2019 - 2024. All rights reserved.