Javascript 使用对象数组访问类函数

Javascript 使用对象数组访问类函数,javascript,class,oop,p5.js,Javascript,Class,Oop,P5.js,我用p5.js编写代码,发现了一个无法通过的问题 我有一个名为“盒子”的类。我已经在使用“盒子”的功能了。但是,当我尝试将函数应用于对象数组时,它没有起作用。我如何解决这个问题 class Boxes { constructor() { this.x; this.y; this.r=222; this.g=55; this.b=111; } show() {

我用p5.js编写代码,发现了一个无法通过的问题

我有一个名为“盒子”的类。我已经在使用“盒子”的功能了。但是,当我尝试将函数应用于对象数组时,它没有起作用。我如何解决这个问题

class Boxes
{
    constructor()
    {
        this.x;
        this.y;
        this.r=222;
        this.g=55;
        this.b=111;
    }

    show()
    {
        fill(this.r,this.g,this.b);
        rect(this.x,this.y,50,50);
    }
}
对于标准变量,它的工作原理与此完全相同

当我尝试不同的东西时,它不起作用。下面是一个例子

上面写着:“MyBox[1]。show不是一个函数”

虽然我编写了show()函数,但它带有括号。上面说 “MyBox[1]。show不是一个函数”当我使用 box1.show()。如何使用对象数组访问函数? 我要不要试试别的?你有什么建议


如果创建非Box对象,则其原型链中没有
show
。但这没关系,如果您有权访问该类,则可以使用non-box对象调用prototype方法作为
this

类框{
show(){
console.log(this.x);
}
}
var mybox=[{'x':this.x,'y':this.y}];
mybox.push({x:100,y:100});

box.prototype.show.call(mybox[1])
如果您想要一组框,您可以。
push()
新对象如下:

类框{
构造函数(参数){
this.x=param.x;//分配x
this.y=param.y;//分配y
这个r=222;
这个g=55;
这是b=111;
}
show(){
console.log(this.x,this.y);//测试代码,
//填充(这个r,这个g,这个b);
//rect(this.x,this.y,50,50);
}
}
var mybox=[];
推(新框({x:3,y:20}))//创建一个新框并推送到阵列
推(新框({x:30,y:200}))//创建一个并推送到数组

MyBox[1]。显示()//在
box1
的情况下,您实际上创建了一个
Boxes
对象。在数组示例中没有。MyBox是一个包含x和y的对象数组。它没有
show()
函数。您想要实现什么?我试图将show()函数添加到此行,但无法实现。有没有办法实现这一点<代码>var mybox=[{'x':this.x,'y':this.y}]我尝试了
var mybox=[{'x':this.x,'y':this.y,'show':this.show()}]当然它也不起作用。有什么建议吗?非常感谢。但我尝试使用show()函数推送MyBox[2]。然后它说无法从0读取未定义的数组计数的属性“show”。所以你可以
mybox[0].show()
mybox[1]。显示()
MyBox[1]。显示()
实际上是第二个
.push()
@fighgm我必须使用“param”关键字吗?如果我写
this.x=350首先,代码获取push()函数的编号,然后一直使用它。但我想先申报,没人能申报change@fighg您不必使用
参数
(构造函数)。有几种方法可以将值指定给对象的特性。您不能在类代码块之外使用
<代码>这
在课堂之外可能意味着另一件事等待你的答案。成功了。但是当我使用push()函数
var mybox=[{'x':this.x,'y':this.y}]时这些x和y首先由计算机在一步之后获取,然后永远获取我的构造函数的值。如果我试着在构造函数中保持x和y的清晰,那么它就不会识别x和y。如何将x、y等变量分配给对象的x、y、r、g、b?
var box1 = new Boxes();
box1.show(); // It works.
var myboxes = [{'x':this.x, 'y':this.y}]; // That's OK :)

myboxes.push({x:100, y:100}); // That's OK too :)

myboxes[1].show(); // But. It gives an error :/