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

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

最佳答案

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 of someArr

下面的代码使用 Class 语法中的 setget 来实现您的目标。这是实现此目的的几种方法之一。但是,不建议这样做,因为这是一个糟糕的设计。将属性(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/

相关文章:

javascript - 无法在 JavaScript 中导入模块

javascript - Vue项目导入js文件报错

javascript - 在 JavaScript 中将多维数组转换为 CSV 文件的列,并使用浏览器书签保存

javascript - 如何显示用 JavaScript 创建的 Canvas ?

javascript - 当我将鼠标悬停在 wordpress 循环中的每个帖子上时的不同操作

javascript - 使用 hasOwnProperty 时无法将 null 或 undefined 转换为对象

php - 从一个选项卡导航到另一个选项卡

javascript - 在 gridview 中显示选中复选框的数量

javascript - 如何在使用 javascript/jquery 单击按钮时在 div(缩略图)中上传图标?

JavaScript 通过数组进行过滤,并且仅根据一个值的匹配返回