JavaScript参考下降

Jos*_*nar 7 javascript

我正在创建一个扩展现有应用程序的模块。我收到了一个变量device,我想创建myDevice一个始终包含相同数据的变量。可以说数据包含在数组中:

https://jsfiddle.net/hmkg9q60/2/

var device = {
  name: "one",
  data: [1, 2, 3]
};
var myDevice = {
  name: "two",
  data: []
};

myDevice.data = device.data; // Assign array reference


device.data.push(4); // Push works on array reference

console.log(device.data); // [1, 2, 3, 4]
console.log(myDevice.data); // [1, 2, 3, 4] - ok


device.data = [0, 0, 0]; // A new array is assigned to 'device'
// and 'myDevice' reference stays with old array

console.log(device.data); // [0, 0, 0] 
console.log(myDevice.data); // [1, 2, 3, 4] - I would like to get [0,0,0]
Run Code Online (Sandbox Code Playgroud)

我想获得的是要确保的myDevicedevice,即使有人决定在应用程序中的某个位置使用assign运算符,也将始终与保持相同的数据。我不想克隆,myDevice因为我想保留“名称”和其他属性。

JavaScript中有没有一种方法可以创建对对象字段的引用?

Mat*_*len 4

您可以使用 getter 和 setter,直接从device对象读取数据并为其赋值。

var device = {
  name: "one",
  data: [1, 2, 3]
};
var myDevice = {
  name: "two",
  get data() { return device.data; },
  set data(newdata) { device.data = newdata; },
};

console.log(myDevice.data);
device.data = [4,5,6];
console.log(myDevice.data);
Run Code Online (Sandbox Code Playgroud)