Javascript 引用存储在另一个类的数组中的类实例

Javascript 引用存储在另一个类的数组中的类实例,javascript,class,this,Javascript,Class,This,如果标题没有意义,我会道歉。我把自己搞糊涂了,但我将试着详细说明下面的问题 我有三个Javascript类: js包含类映射 B js包含类mapObject 用于MapMaker的C js逻辑 在C类中,我创建了一个map实例,它是一个带有网格布局的画布 用户可以单击地图并使用热键添加mapObject的实例 现在,我正试图显示mapObject图标,但对于如何显示,我完全感到困惑: 地图创建和地图对象创建代码C js: case 13: // Enter Key (Submit)

如果标题没有意义,我会道歉。我把自己搞糊涂了,但我将试着详细说明下面的问题

我有三个Javascript类:

js包含类映射 B js包含类mapObject 用于MapMaker的C js逻辑

在C类中,我创建了一个map实例,它是一个带有网格布局的画布

用户可以单击地图并使用热键添加mapObject的实例

现在,我正试图显示mapObject图标,但对于如何显示,我完全感到困惑:

地图创建和地图对象创建代码C js:

 case 13: // Enter Key (Submit)
        unhighlightTools();
        currentMap.drawMap();
        if(currentFloor != null){
            currentFloor.hasFloor = true;
            if(currentFloor.tileName == "Guild"){
                createGuildObject(currentFloor.position.x,currentFloor.position.y,currentFloor);
            }
            console.log("Map object created at - X:"+currentFloor.position.x+" Y:"+currentFloor.position.y);
            createMapObject(currentFloor.position.x,currentFloor.position.y,currentFloor);
        }
        currentFloor = null;
        highlightTools();
        break;
}

// Create a Map Object and push it to the currentMap with its position.
function createMapObject(x,y,floor){
currentMap.objects.push(new MapObject(x,y,floor));
}

// Create a Guild Object (extension of Map Object) and push it to the currentMap with its position.
function createGuildObject(x,y,floor){
currentMap.objects.push(new Guild(x,y,floor));
}
在MapObject b js中定义地图图标

class MapObject {
constructor(x,y,floor) {
    this.position = {x, y};
    this.icon = this.wallFloorIcons(floor);
 }

 wallFloorIcons(floor) {
    var self = this;
    self.img = new Image();

    self.name = <code that creates the name>
    self.name = 'wall-'+self.name+'.png';

    if(self.name == 'wall-.png'){
        self.img.src = "../images/mapSprites/floor.png";
    }else {
        self.img.src = "../images/mapSprites/"+self.name;
    }

    console.log(self.img);
    return self.img;
 }
总之

我正在创建一个类的实例,将其推送到另一个类的数组中。然后,在尝试从第一个类的实例中获取第二个类的图标时陷入困境

我的console.logj.icon返回undefined,我似乎无法从MapObject中获取任何细节,但是如果我是console.logj,那么我确实可以在控制台中看到MapObject及其所有细节

我在这方面还是新手,我确信我把事情搞得一团糟,所以请对我放松点:p

谢谢! Lemongrab

objectsAtPosition正在返回一个对象数组,而数组没有图标属性。也许您想迭代self.objectsAtPosition{x:floor.position.x,y:floor.position.y}:

其他一些建议:

您可以使用floor.position代替{x:floor.position.x,y:floor.position.y}。 objectsAtPosition可以更简单地使用Array.filter编写:返回this.objects.filtero=>o.position.x==position.x&&o.position.y==position.y 无需执行var self=this,除非您希望能够在方法中的匿名函数中访问该值。
非常感谢你。现在觉得很尴尬,我看的是数组而不是对象>。
fillMap(){
    var self = this;

    self.c.lineWidth = 1;
    self.c.strokeStyle = 'black';
    self.c.fillStyle = "rgba(255, 255, 255, 0.2)";

    for (var row = 0; row < self.boxes; row++) {
        for (var column = 0; column < self.boxes; column++) {
            var x = column * self.boxSize;
            var y = row * self.boxSize;

            self.c.beginPath();
            self.c.rect(x, y, self.boxSize, self.boxSize);
            self.c.stroke();
            self.c.closePath();

            for (var i=0; i<self.objects.length; i++) {
                var floor = self.objects[i];
                if (floor.position.x == column && floor.position.y == row) {  
                    if (self.objectsAtPosition({x:floor.position.x, y:floor.position.y}) != null) {
                        var j = self.objectsAtPosition({x:floor.position.x, y:floor.position.y});
                        console.log(j.icon);
                        this.c.drawImage(self.objectsAtPosition({x:floor.position.x, y:floor.position.y}).getIcon(),x,y, self.boxSize, self.boxSize);
                    }
                }     
            }
        }
    }
objectsAtPosition(position) {
    var objs = [];
    for (var o of this.objects) {
        if (o.position.x == position.x && o.position.y == position.y) {
            objs.push(o);
        }
    }
    return objs;
}
const mapObjects = self.objectsAtPosition({x:floor.position.x, y:floor.position.y})
for (const mapObject of mapObjects) {
    this.c.drawImage(mapObject.getIcon(), x, y, self.boxSize, self.boxSize);
}