在getter方法中返回的私有TypeScript类变量会在其他类中受到影响吗?

时间:2017-02-22 07:26:34

标签: angular typescript

这是一个有角度的2项目。

我有一个包含静态城市数据的课程:

export class CityService {    
    private availableCities: City[] = [];

    constructor() {
        this.availableCities.push(new City('london', 'London'));
        this.availableCities.push(new City('paris', 'Paris'));
    }

    getAll() {
        return this.availableCities;
    };
}

我有另一个课使用它:

export class NavbarComponent {
    private cities: City[];
    private currentCity : City;

    constructor(private cityService: CityService) {
        this.cities = cityService.getAll();
        this.currentCity = cityService.getCurrent();
        this.cities.forEach((city, index) => {
            if (city.name == this.currentCity.name) {
                //@todo BUG This affects private cities variable in CityService class WTF!!!!!!!
                this.cities.splice(index, 1);
                return;
            }
        })
    }

}

因此,在本课程的构造函数中,我尝试使用getAll()方法加载所有城市。这些城市被加载到NavbarComponent自己的私有城市变量中。然而,当我使用NavbarComponent的城市操作时,它改变了CityService的城市私有财产! 为什么????????这破坏了我对世界的看法!

任何人都可以解释并提供链接,以便了解为何会发生这种情况

TypeScript版本2.1.5

1 个答案:

答案 0 :(得分:1)

您已返回该城市的参考。所以你有一个带有两个引用的对象,如果你从一个引用改变它,它也将被改为第二个。在这种情况下,您可以使用PATH函数而不是Administrator,因为slice()实际上更改了数组。

splice()