【发布时间】:2014-05-12 04:27:00
【问题描述】:
我知道在 javascript 中,primitives are passed by value and objects are passed by reference。
我有兴趣创建某种解决方法,让我获得对包含原语的对象属性的引用。例如,我希望工作的是:
var someObject = {a: 1, b: 2};
var myRef = someObject.b;
myRef ++;
someObject.b #=> 3
当然,这是行不通的。我知道您可以创建一个 getter 和 setter 函数,或者使用一个对象来引用另一个对象,但我真正想要的是某种解决方法,它允许我将变量定义为对属性的引用另一个对象,到目前为止,这似乎无法完成。
所以,我的问题很简单:这是否可能,如果可以,如何实现?
【问题讨论】:
-
你尝试的方法,只适用于可变对象。
-
所以,我明白了,但似乎您设置为属性或变量的任何内容至少有一个指向它的引用......所以看起来应该有一些创建对引用的引用而不是对值的引用的方法......我想这不是 JS 的工作方式,但目前我还不清楚为什么。
-
您只能在javascript中获取对对象或数组的引用。因此,获取对其他类型的引用的唯一方法是将其放入对象或数组中并传递/分配包含对象或数组。这就是 JS 的工作原理。
-
可能没有什么好的方法可以做到这一点,即使有解决方法,您也可能不应该使用它,因为它有点破坏了通过“复制引用”传递的意义(javascript 确实不通过引用传递)。
-
@Andrew 您正在增加一个数字,该数字是不可变的。因此,在递增之后,将创建一个具有递增值的新不可变对象,并且引用
myRef将引用该新创建的对象。所以,无论如何你都会失去旧的参考。
标签: javascript variables reference