是否有可能为一个变量指向另一个在这样的阵列,一个变量可能指向另一个变量吗?
var theArray = [0,1,2,3];
var secondElement = //somehow point to theArray[1]
使得如果我修改theArray[1]
,secondElement
还应当修改,反之亦然(可能的话,不使用函数)?
是否有可能为一个变量指向另一个在这样的阵列,一个变量可能指向另一个变量吗?
var theArray = [0,1,2,3];
var secondElement = //somehow point to theArray[1]
使得如果我修改theArray[1]
,secondElement
还应当修改,反之亦然(可能的话,不使用函数)?
你在问关于引用 - 对于原始值,它不是直接可能在Javascript中。这是可能的W/R/T对象:
C:\WINDOWS>jsdb
js>a = []
js>b = {refToA: a}
[object Object]
js>b.refToA.push(3)
1
js>a
3
js>a.push(4)
2
js>b.refToA
3,4
js>
在上面的例子中,对象b
有一个属性refToA它包含对象a
;两者都引用相同的实际对象,因此对象b.refToA
和a
的更改通过访问它的两种方式反映出来。如果您重新指定b.refToA
或a
,则此参考被破坏。类似地使用数组:
js>x = {y: 3, toString: function() { return 'y='+this.y; }}
y=3
js>a = [x]
y=3
js>b = [3,x]
3,y=3
js>a[0].y = 22
22
js>b
3,y=22
js>b[1].y = 45
45
js>a
y=45
a[0]
和b[1]
都有一个值,该值是相同的附图中的对象。
只有当共享对象是一个可变容器时,才能实现您正在查找的效果,以便您的两个所需变量具有(并且始终具有)相同的值,这是对共享可变容器的引用。您可以更改容器中的值,并且可以通过两种访问方式查看它们。原始值(例如数字和字符串)不是可变容器,因此它们不能以这种方式使用。
没有办法直接做到这一点。该数组可以是一个对象数组,您可以直接修改对象的属性而不是数组条目。然后,你将有:
var theArray = [ { value: 0 }, { value: 1 }, { value: 2 }, { value: 3 } ];
var secondElement = theArray[1];
然后改到theArray[1].value
也将是可见的secondElement.value
。
我会提供的观察,功能是友好的事情,他们不会伤害你,如果你不尝试和尾巴拿起来。
您可以使用对象的属性和与对象包装你的数组:
var a = {arr: [1,2,3,4]};
var b = a;
b.arr[0] = 777;
console.log(a.arr);
这种方法的优点是,你还可以指定新值都a.arr
和b.arr
。
var a = {arr: [1,2,3,4]};
var b = a;
a.arr = [777,888];
console.log(b.arr);
这是我最初的想法。但是我有很多这些,并有许多重复的对象搞乱了代码。 – Manu 2011-01-20 14:49:12
是的。这是我从C++引用中遗漏的那些东西之一。但是由于我大部分的函数代码都是一个封装对象,我现在已经使用了getter和setter .. var obj = {0} {1} [1,2,3], get secondElement(){ return this.a [0]; (){ }返回this.secondElement; } } 我知道getters是“特殊功能”,但他们肯定看起来很干净! – Manu 2011-01-20 15:32:43