是否有可能有2个变量指向同一个对象?(JavaScript的)

Wes*_*ley 8 javascript pointers pass-by-reference

我试图让变量"my_a"和letters.a指向同一个对象.

//i want letters.a to reference (point to) my_a, not be a copy...
//expected output should be: letters.a = c
//made variables into Objects.. but didn't help.

var my_a = new Object('a');
var my_b = new Object('b');
var letters = {'a': my_a, 'b': my_b};

$('#output').append('my_a = ' + my_a + '<br>');
$('#output').append('leters.a = ' + letters.a + '<br>');

my_a = new Object('c');

$('#output').append('my_a = ' + my_a + '<br>');
$('#output').append('letters.a = <span style="color:red">' + letters.a + '</span>');
?
Run Code Online (Sandbox Code Playgroud)

看到这个小提琴:

http://jsfiddle.net/jCsUq/1/

但是正如你可以从输出中看到的那样,这是行不通的.

有任何想法吗?用javascript可以实现吗?

谢谢.

Poi*_*nty 5

你的问题的答案是"是",但我认为你的问题没有准确描述你想要做的事情.你想要的是letters.a引用变量"my_a",在C++中可以用&运算符做什么.这在JavaScript中是不可能的.

在声明中:

my_a = new Object('c');
Run Code Online (Sandbox Code Playgroud)

你给"my_a"一个新的,不同的价值.因此,letters.a仍然指的是它做了同样的事情,而"my_a"已经改变了.没有办法让变量或对象属性"跟踪"另一个(在JavaScript中).

编辑 - 实际上我发现你可以通过为"字母"的"a"属性定义"getter"来执行你正在寻找的东西,一个返回"my_a"的当前值.它需要您正在使用的JavaScript引擎中的功能,但它看起来像:

var letters = {};
Object.defineProperty(letters, "a", {
  get: function() { return my_a; },
  set: function(v) { my_a = v; }
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,IE9之前的IE不支持.这是更新的jsfiddle.