2

菜鸟问题我敢肯定。要温柔。(或者不是,它不会杀了我)。

也许答案已经发布了,我只是在搜索中没有认出它,但是这里有:

我有一个定义方法的类。我已经创建了该类的几个实例并将它们保存在一个数组中。当我尝试访问类中定义的实例方法时,我收到错误“无法读取属性”。如果我将数组索引对象分配给一个变量并进行调用,它不会引发错误,但也不会似乎按预期工作。也就是说,在我的循环中,它似乎只为最后一次迭代分配方法。代码可能会有所帮助,尽管它可能是令人尴尬的:

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()`,我会收到提到的错误。

我不知道这是否足以继续,但希望得到任何指导或提示。

4

0 回答 0