通过资源库存储的新属性值在执行之前生效



我正在创建类坐标的 4 个实例。接下来,我将通过二传手更改其中一个值。

class Coordinates {
constructor(lat, lng) {
this._lat = lat;
this._lng = lng;
}
get lat() { return this._lat; }
get lng() { return this._lng; }
set lat(newLat) { this._lat = newLat; }
set lng(newLng) { this._lng = newLng; }
}
let points = [];
for (let p = 0; p < 4; p++) {
const point = new Coordinates(p, p);
points.push(point);
}
console.log(points);  // Shows the 55, although the setter wasn't executed
points[1].lat = 55;
console.log(points); // Shows the 55 (as expected)

第一个控制台.log显示 0/0、55/1、2/2、3/3。我实际上期望0/0,1/1,2/2,3/3,因为我没有执行二传手。第二个日志显示 0/0、55/1、2/2、3/3,如预期的那样。 有人可以帮助我理解吗?

由于我无法在 Node.js 中重现这一点,但可以在 Chrome 控制台中重现,我想这是因为points变量懒惰地显示在控制台中,即当您单击它以查看元素的详细信息时,它会进行实时重新评估。如果您尝试此操作,您可以看到问题消失了,因为现在您有字符串原语而不是活动对象。

console.log(JSON.stringify(points));
points[1].lat = 55;
console.log(JSON.stringify(points));

最新更新