菜鸟问题我敢肯定。要温柔。(或者不是,它不会杀了我)。
也许答案已经发布了,我只是在搜索中没有认出它,但是这里有:
我有一个定义方法的类。我已经创建了该类的几个实例并将它们保存在一个数组中。当我尝试访问类中定义的实例方法时,我收到错误“无法读取属性”。如果我将数组索引对象分配给一个变量并进行调用,它不会引发错误,但也不会似乎按预期工作。也就是说,在我的循环中,它似乎只为最后一次迭代分配方法。代码可能会有所帮助,尽管它可能是令人尴尬的:
class Track {
constructor(path,docroot) {
this.path = path;
this.docroot = docroot;
}
urlpath() {
var x = this.docroot.length;
return this.path.substring(x);
};
createWave(id) {
var url = this.urlpath();
var wavesurfer = WaveSurfer.create({
container: '#' + id,
waveColor: 'violet',
progressColor: 'purple'
});
wavesurfer.load(url);
return wavesurfer;
}
}
for (i = 0; i < 2; i++) {
tracks[i] = new Track(audiofiles[i],docroot);
waves[i] = tracks[i].createWave("wave-container-" + i);
var w = waves[i];
var playpausebtn = document.createElement('BUTTON');
playpausebtn.innerHTML = "Play / Pause";
playpausebtn.id = "playpause";
document.getElementById('wave-container-' + i).appendChild(playpausebtn);
document.getElementById('playpause').onclick = function() { w.playPause(); };
}
对于熟悉它的人,wavesurfer.js 定义了 wavesurfer 对象的 playPause 方法,由我的类方法中的 createWave() 返回。如果我w.playPause
按上述方式调用它,它可以工作 - 但仅适用于两个实例之一。如果我放弃 var w = waves[i] 分配并简单地尝试将 onclick 操作设置为waves[i].playPause()`,我会收到提到的错误。
我不知道这是否足以继续,但希望得到任何指导或提示。