【发布时间】:2018-06-21 18:02:08
【问题描述】:
当您将对象引用作为参数传递给函数时,分配给该引用只会更改引用的内容,但不会更改值,如下所示:
class meh {
constructor() {
this.obj = { member: 7 };
}
doSomething() {
doFn(this.obj);
}
doFn(objRef) {
objRef = { newMember: 4 } // Doesn't overwrite obj; merely assigns a new object to objRef.
}
}
但是有没有办法覆盖或以其他方式为对象引用指向的实际位置分配一个值?意思是,有没有办法将一个新对象分配给objRef(在doFn)并反映在obj中?
【问题讨论】:
-
不,因为这会使代码不可靠。任何地方的变量都可能发生变化,甚至在可能导致神秘错误的范围之外。所以不,这是不可能的,有充分的理由。
-
变量指向值,而不是相反。当你说
this.obj = foo时,this.obj 指向foo的位置。当您随后说this.obj = bar时,您的 obj 现在只是指向bar的位置。赋值不会改变值的任何内容。 (这就是为什么const以它的方式工作的原因,顺便说一句)。这也是为什么变量在 JS 中没有类型 - 只有值有 - 变量只是指向一个值,而重新分配只是将指针重新分配到另一个值的位置。
标签: javascript reference ecma