在执行之前,通过设定器存储的新属性值会生效。

问题描述 投票:0回答:1

我正在创建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, 和预期的一样。有人能帮我理解一下吗?

javascript class setter
1个回答
0
投票

由于我无法在Node.js中重现,但在Chrome控制台中却可以重现,我想这是由于 points 变量在控制台中懒散地显示,也就是说,当您点击它以查看元素的详细信息时,它有一个实时的重新评估。如果您尝试这样做,您可以看到问题已经消失了,因为现在您有字符串基元而不是实时对象。

console.log(JSON.stringify(points));
points[1].lat = 55;
console.log(JSON.stringify(points));
© www.soinside.com 2019 - 2024. All rights reserved.