将值设置为引用的 JavaScript 对象
Set value to a referenced JavaScript object
比如我有如下JS对象:
var obj = {
n: 0,
o: {}
};
var nGlobal = obj.n;
var oGlobal = obj.o;
并希望使用全局变量使其看起来像这样:
var obj = {
n: 5,
o: {
x: 7
}
};
显然,我可以为 oGlobal
的 属性 赋值:
oGlobal.x = 7;
但是,有什么办法可以通过nGlobal
改变obj.n
的值,而不用提到obj
?
就像这样:
console.log(obj); // {n: 1, o: {}}
nGlobal.set(5);
// or
nGlobal.value = 5;
console.log(obj); // {n: 5, o: {}}
简答:
No, there is not.
长答案:
- In JS primitive types are immutable and passed by values.
- JS implements pass-by-value strategy, which means that ALL data is always passed by value (in case if you pass a reference to object - the reference is passed by value)
上述项目的一个重要结果:在 JS 中,无法使用 =
操作更改原始对象。也就是说:当你有一个对象的引用时,你可以修改它,但你不能将一个对象与其他对象交换,这样所有其他引用也 "were modified".
相关:
学分:
比如我有如下JS对象:
var obj = {
n: 0,
o: {}
};
var nGlobal = obj.n;
var oGlobal = obj.o;
并希望使用全局变量使其看起来像这样:
var obj = {
n: 5,
o: {
x: 7
}
};
显然,我可以为 oGlobal
的 属性 赋值:
oGlobal.x = 7;
但是,有什么办法可以通过nGlobal
改变obj.n
的值,而不用提到obj
?
就像这样:
console.log(obj); // {n: 1, o: {}}
nGlobal.set(5);
// or
nGlobal.value = 5;
console.log(obj); // {n: 5, o: {}}
简答:
No, there is not.
长答案:
- In JS primitive types are immutable and passed by values.
- JS implements pass-by-value strategy, which means that ALL data is always passed by value (in case if you pass a reference to object - the reference is passed by value)
上述项目的一个重要结果:在 JS 中,无法使用 =
操作更改原始对象。也就是说:当你有一个对象的引用时,你可以修改它,但你不能将一个对象与其他对象交换,这样所有其他引用也 "were modified".
相关:
学分: