假设我在JavaScript中有以下代码:
var x = 2;
var myArray = [0,1,x];
x = 3;
更改x
的值会使myArray
完全保持不变,因此myArray[2]
仍为2.
如何设置它以便我可以在myArray[*wherever x is*]
重复更改元素而不实际知道索引?
答案 0 :(得分:4)
您可以将您的值放在一个对象中。
var x = {
value: 2
}
var myArray = [0,1,x];
console.log(myArray[2].value); // 2
x.value = 3;
console.log(myArray[2].value); // 3
在这种情况下,您总是指向同一个对象,其内容可以随时更改。
答案 1 :(得分:4)
您可以定义一个充当活动变量引用的getter:
var myArray = Object.defineProperty([0,1], 2, {
get() { return x },
enumerable: true,
configurable: true
});
var x = 2;
console.log(myArray);
x = 3;
console.log(myArray);
当然,这对阵列来说是一件可怕的事情,并且可能会在使用阵列的每个地方造成严重的性能损失。所以:不要这样做。只需在每个地方分配myArray[2]
而不是x
,或使用getter / setter函数对代替执行此操作的x
变量。
function setX(v) { myArray[2] = v; }
var myArray = [0,1,2];
setX(2);
console.log(myArray);
setX(3);
console.log(myArray);