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)
看到这个小提琴:
但是正如你可以从输出中看到的那样,这是行不通的.
有任何想法吗?用javascript可以实现吗?
谢谢.
你的问题的答案是"是",但我认为你的问题没有准确描述你想要做的事情.你想要的是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.
| 归档时间: |
|
| 查看次数: |
3466 次 |
| 最近记录: |