我真的不知道该怎么称呼,但是我想将对象的键指向变量的值。但是,当我这样做时,对象的键值指向原始值的副本,而不是原始变量本身。
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
的值?
答案 0 :(得分:3)
那么这是怎么回事...为什么呢?
正如zerkms所说,在JavaScript中创建对象常量时,无法维护对外部作用域变量的引用。 JavaScript创建对象时,它将获取您已分配的变量的值,并创建该值的内部副本。
这叫什么?
在其他语言(例如C
及其派生语言中,在Java和其他一些语言中间接使用),这将称为pointer assignment (see #3)。这在JavaScript中不可用。
如何使
someObj.theArr
始终等于someArr
的值
下面的代码使用Class语法中的set
和get
完成您的目标。这是执行此操作的几种方法之一。但是,不建议这样做,因为它的设计较差。取消关联财产及其实际价值绝不是一个好主意。
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)