我正在和一位"经理"选择什么作物应放在某个地块上。每种作物都有完全不同的设计,因此它们有自己的类/对象。然而,不是写出将要实例化该类的40个不同的行,而是希望1行只包含与类的确切名称匹配的字符串然后运行它。这样我的代码就会保持干净。我尝试了一些东西,但从未设法完成它。通常会导致以下错误:
TypeError: this.crop is not a constructor
我试图运行的代码
export default class CropManager extends Phaser.Group {
constructor (game, className, plotId) {
super(game)
this.x = 0
this.y = 0
this.plotId = plotId
this.className = className
this.cropHandler(this.className)
}
// Defines which class to call
cropHandler (className) {
const ActualClass = 'plot' + className
this.cropclasses = { ActualClass: ActualClass}
this.crop = this.cropclasses[ActualClass]
this.classRun = new this.crop(this.game, this.x, this.y, this.plotId)
this.add(this.classRun)
}
}
注意每个裁剪的classname = crop + cropname(cropCarrots,cropCows等)
答案 0 :(得分:1)
重新考虑在this.cropclasses
中存储键值对的方式。它现在的方式,它将'ActualClass'
作为键,'plotNameOfTheClass'
(或任何'plot' + className
产生的)作为值,因此,当稍后作为数组访问它时,{{ 1}}未定义,因为地图中没有this.crop
键。