我正在创建4个Coordinates类的实例。接下来我通过setter改变其中一个值。
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)
第一个 console.log 显示 00, 551, 22, 33。实际上我期望的是00, 11, 22, 33,因为我没有执行setter。第2个日志显示00, 551, 22, 33, 和预期的一样。有人能帮我理解一下吗?
由于我无法在Node.js中重现,但在Chrome控制台中却可以重现,我想这是由于 points
变量在控制台中懒散地显示,也就是说,当您点击它以查看元素的详细信息时,它有一个实时的重新评估。如果您尝试这样做,您可以看到问题已经消失了,因为现在您有字符串基元而不是实时对象。
console.log(JSON.stringify(points));
points[1].lat = 55;
console.log(JSON.stringify(points));