Javascript Tonejs sequencer不识别对象中的变量

Javascript Tonejs sequencer不识别对象中的变量,javascript,web-audio-api,p5.js,tone.js,Javascript,Web Audio Api,P5.js,Tone.js,我正在尝试使用p5.js、p5.soundlibrary和tone.js构建一个包含sequencer的对象 问题是我的代码无法识别在一个对象内的一个函数中编写的变量 类tr909中的所有其他函数都可以识别我在类构造函数中声明的变量,但变量“序列”无法识别它们 正如您在下面看到的,tr909类有sX和sY变量,但是当我在名为sequence的函数中时(在tr909类内部,在底部),该函数将不再识别变量 你知道为什么会这样吗 谢谢!:) //对象 让tr9091; 设bL9091=16//拍长 设

我正在尝试使用p5.js、p5.soundlibrary和tone.js构建一个包含sequencer的对象

问题是我的代码无法识别在一个对象内的一个函数中编写的变量

类tr909中的所有其他函数都可以识别我在类构造函数中声明的变量,但变量“序列”无法识别它们

正如您在下面看到的,tr909类有sX和sY变量,但是当我在名为sequence的函数中时(在tr909类内部,在底部),该函数将不再识别变量

你知道为什么会这样吗

谢谢!:)

//对象
让tr9091;
设bL9091=16//拍长
设posX9091=100//位置X 909
设posY9091=220//位置909
设sX9091=320//909的sizeX
设sY9091=60//909的西齐
//var cellWidth=sX9091/bL9091//不知道为什么,若我把它放在909对象的构造函数中,序列函数不能识别cellWidth
//预加载音频文件
让hh909、clp909m、bd909;
让时间;
让比阿特指数;
var-sX;
let序列;
//var-sX=1;
函数预加载(){
bd909=loadSound('assets/bass_sample.mp3');
hh909=loadSound('assets/hh_sample.mp3');
clp909=loadSound('assets/clap_sample.mp3');
}
函数设置(){
createCanvas(600400);
tr9091=新的tr909(bd909、hh909、clp909、bL9091、posX9091、posY9091、sX9091、sY9091);
}
函数绘图(){
}
功能键按下(){
如果(键==''){
tr9091.clicked();
}
}
函数mousePressed(){
tr9091.rectPressed();
}
tr909类{
建造商(bd、hh、clp、beatLenght、pX、pY、sX、sY){
//变数
this.bd=bd;
this.hh=hh;
this.clp=clp;
this.beatLenght=beatLenght;
this.pX=pX;//位置x 909
this.pY=pY;//位置Y 909
this.sX=sX;//sizeX 909
this.sY=sY;//sizeY 909
this.cellWidth=this.sX/this.beatLength;
//序列
this.bdPat=[1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0];
this.hhPat=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
this.clpPat=[0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0];
this.sPat=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
this.cursorPos=0;
//词组
this.bdPhrase=新的p5.Phrase('bd',(时间)=>{
此.bd.play(时间)
},本页。bdPat);
this.hhPhrase=新的p5.Phrase('hh',(时间)=>{
这个.hh.play(时间)
},这是;
this.clp短语=新的p5.短语('clp',(time)=>{
此.clp.play(时间)
},本文件编号为clpPat);
//零件
this.drums=新的p5.Part();
//向部件添加短语
this.drums.addPhrase(this.bdPhrase);
this.drums.addPhrase(this.hhPhrase);
this.drums.addPhrase(this.clpPhrase);
this.drums.addPhrase('seq',this.sequence,this.sPat);
//BPM
让bpmCTRL;
this.bpmCTRL=createSlider(30,120,120,1);
该.bpmCTRL.位置(pX+10,pY+70);
此.bpmCTRL.input(()=>{
this.drums.setBPM(this.bpmCTRL.value())
});
本节中的“鼓”为“120”;
这个.drawMatrix();
}//最终构造函数
单击(){//播放循环
this.drums.loop();
}
rectPressed(){
//在对象内部单击鼠标Y键
if((mouseY>this.pY&&mouseYthis.pX&&mouseX
因为这里:

this.drums = new p5.Part();
//adding phrase to parts
this.drums.addPhrase(this.bdPhrase);
this.drums.addPhrase(this.hhPhrase);
this.drums.addPhrase(this.clpPhrase);
this.drums.addPhrase('seq', this.sequence, this.sPat);
您可以将其作为回调函数传递。检查此线程中的第一个答案:

将参数
this.sequence
替换为:

function(){ this.sequence() }.bind( this )
甚至更短:

this.sequence.bind(this);
或者像这样:

()=>{ this.sequence() }
或者,当您要传入参数或返回值时:

(...args) => this.sequence(...args) 

@FZs.的积分。。我不是故意要回滚的,我给你添加了建议,很好。我又编辑了最后一个。。。删除括号可以很好地返回值(无返回语句)。我不知道这件事。而且,我特意选择了简单的。你的显然更好、更紧凑、更快,但也不容易理解。当你看一下OP提供的代码时,可以理解这有点不符合他的要求,对吗?无意冒犯。我不会说我的距离太远
(...args) => this.sequence(...args)