设置js对象键值以始终引用现有变量

时间:2019-06-18 01:42:19

标签: javascript

我真的不知道该怎么称呼,但是我想将对象的键指向变量的值。但是,当我这样做时,对象的键值指向原始值的副本,而不是原始变量本身。

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的值?

1 个答案:

答案 0 :(得分:3)

  

那么这是怎么回事...为什么呢?

正如zerkms所说,在JavaScript中创建对象常量时,无法维护对外部作用域变量的引用。 JavaScript创建对象时,它将获取您已分配的变量的值,并创建该值的内部副本。

  

这叫什么?

在其他语言(例如C及其派生语言中,在Java和其他一些语言中间接使用),这将称为pointer assignment (see #3)。这在JavaScript中不可用。

  

如何使someObj.theArr始终等于someArr的值

下面的代码使用Class语法中的setget完成您的目标。这是执行此操作的几种方法之一。但是,不建议这样做,因为它的设计较差。取消关联财产及其实际价值绝不是一个好主意。

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)