
前言在 ArkTS 中private是类的访问修饰符用于封装内部实现细节。在「猫猫大作战」的GameEngine类中棋盘数据、定时器、合并逻辑等内部状态都标记为private只暴露必要的公开方法。合理的封装能降低耦合、减少意外修改、提高代码可维护性。本文以「猫猫大作战」的GameEngine为锚点讲解private的封装原则、构造器初始化、以及公开 API 的设计。一、private 封装exportclassGameEngine{privateboard:(Cat|null)[][];// 棋盘数据外部不可直接修改privatescore:number0;privatecombo:ComboInfo;privategameLoopTimer:number-1;// 只读访问器getScore():number{returnthis.score;}getCombo():ComboInfo{return{...this.combo};}// 公开方法startGame():void{/* ... */}updateCats():Cat[]{/* ... */}isGameOver():boolean{/* ... */}}成员可见性为什么 privateboardprivate棋盘只能通过引擎方法修改scoreprivate得分通过getScore()只读访问comboprivate返回副本防外部修改timerprivate外部不应直接操作定时器二、构造器初始化exportclassGameEngine{privateboard:(Cat|null)[][];constructor(){// 初始化 5×8 空棋盘this.boardArray.from({length:GameConfig.BOARD_HEIGHT},()Array(GameConfig.BOARD_WIDTH).fill(null));this.score0;this.combo{count:0,multiplier:1,lastMergeTime:0};}reset():void{this.boardArray.from({length:GameConfig.BOARD_HEIGHT},()Array(GameConfig.BOARD_WIDTH).fill(null));this.score0;this.combo{count:0,multiplier:1,lastMergeTime:0};}}三、公开 API 设计exportclassGameEngine{// 只读查询getBoard():(Cat|null)[][]{returnthis.board.map(row[...row]);}getAllCats():Cat[]{/* ... */}getCatAt(x:number,y:number):Cat|null{/* ... */}// 操作方法外部触发placeCat(col:number,level:CatLevel):boolean{/* ... */}tryMergeAt(x:number,y:number):boolean{/* ... */}updateCats():Cat[]{/* ... */}// 状态查询isGameOver():boolean{/* ... */}getScore():number{returnthis.score;}getCombo():ComboInfo{return{...this.combo};}}四、最佳实践默认 private除非需要外部访问否则全部 private返回只读副本getCombo()返回{ ...this.combo }防外部修改构造器初始化所有字段避免字段未定义reset() 复用初始化逻辑提取为initBoard()方法共用privateinitBoard():(Cat|null)[][]{returnArray.from({length:GameConfig.BOARD_HEIGHT},()Array(GameConfig.BOARD_WIDTH).fill(null));}五、常见错误错误原因修复外部直接修改engine.boardboard 为 public改为 private getter构造器未初始化字段声明时赋默认值score: number 0返回了内部引用外部修改了引擎数据返回深拷贝总结private封装保护 GameEngine 的内部状态通过构造器初始化所有字段通过公开方法提供安全的操作接口。核心要点默认 private、 构造器初始化所有字段、 getter 返回只读副本、 reset() 复用初始化逻辑。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源ArkTS 类与访问修饰符GameEngine.ets 源码第 118 篇constructor第 120 篇random 随机