修改类属性时,不要传值引用

44 阅读1分钟

一个类有一个二维数组,如何定义一个方法,能够多次将该二维数组全部设置为null?我的写法为什么不生效?

class MainBoard{ 
    cellNumber: number = 8; 
    gemMatrix: string[][] = Array.from({ length: this.cellNumber }, () => Array(this.cellNumber).fill(null)); //宝石矩阵,初始化为空 

private initializeGem(gemMatrix): void { 
    gemMatrix = Array.from({ length: this.cellNumber }, () => Array(this.cellNumber).fill(null)); }; 
}

在你的 MainBoard 类中,initializeGem 方法的写法存在一个问题:它试图通过重新赋值参数 gemMatrix 来修改类属性 gemMatrix,但这种方式实际上并不会影响到类属性。在 JavaScript 和 TypeScript 中,当你将一个对象(在这里是数组)作为参数传递给函数时,你传递的是引用的副本。因此,如果你在函数内部重新赋值这个参数,它只会改变局部变量的引用,而不会改变原始对象。 要正确地设置类中的二维数组为 null,你应该直接在类的方法中操作这个类属性。这里是如何修改你的类,以确保 gemMatrix 能被正确地初始化为 null

private initializeGem(): void {
    this.gemMatrix = Array.from({ length: this.cellNumber }, () => Array(this.cellNumber).fill(null));
};