我真的不知道该怎么称呼这个想法,但我想将对象的键指向变量的值。但是,当我这样做时,对象的键值指向原始值的副本,而不是原始变量本身。
let someArr = ['the original array', 1];
const someObj = {
theArr: someArr
}
console.log(someObj.theArr)
// ['the original array', 1]
someArr = ['a new array', 2]
console.log(someObj.theArr)
// ['the original array', 1]
所以这里发生的是,当创建 obj 并将键值设置为 someArr
时,someArr
的值被复制到键,但实际的someArr
数组对象未被指向。
首先,这是为什么?这个叫什么?其次,如何使 someObj.theArr
始终保持等于 someArr
的值?
最佳答案
So what's happening here...why is this?
正如 zerkms 所说,在 JavaScript 中创建对象文字时,无法维护对外部作用域变量的引用。当 JavaScript 创建对象时,它会获取您分配的变量的值并创建该值的内部副本。
What is this called?
在其他语言中,例如 C 及其衍生语言,间接在 Java 和其他一些语言中,这将被称为 pointer assignment (see #3) 。这在 JavaScript 中是不可用的。
how could I make
someObj.theArr
always stay equal to the value ofsomeArr
下面的代码使用 Class 语法中的 set
和 get
来实现您的目标。这是实现此目的的几种方法之一。但是,不建议这样做,因为这是一个糟糕的设计。将属性(property)与其实际值(value)分开绝不是一个好主意。
let someArr = ['the original array', 1];
class SomeObj {
get theArr() {
return someArr;
}
set theArr(arr) {
theArr = arr;
someArr = arr;
}
}
const someObj = new SomeObj();
console.log(someObj.theArr)
someArr = ['a new array', 2]
console.log(someObj.theArr)
关于javascript - 设置js对象键值以始终引用现有变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640745/