xmlhttprequest和Web Audio API的作用域问题
Scope issue with xmlhttprequest and Web Audio API?
我是JS的新手,我一直在尝试用Web Audio API实现一种混音器。我一直在阅读一些关于JS的作用域和实现"类"的不同方法,但显然我还没有完全理解它。我有这个soundClass
对象,我想让它包含一个track
对象的数组,我想在tracklist
上push
一个新的track
,一旦它被解码。然而,当我console.log
tracklist
或每个track
时,第一个日志(console.log('track name '+ that.track.name);
)显示正确的曲目名称,但如果我尝试记录that.track
对象本身,它总是显示添加的最后一个曲目,所以如果我调用soundClass.newTrack('track1.mp3')
和soundClass.newTrack('track2.mp3')
和console.log(soundClass.tracklist)
,我得到一个包含两个track2.mp3对象的数组。我想这是一个作用域问题或异步解码的问题,但我实际上不知道,所以它可能只是一些愚蠢的错误。
如果这是一个非常基本的问题,我很抱歉,但我希望你能帮助我。
var soundClass = {
audioContext: new webkitAudioContext,
currentTime: 0,
track: {
name: 0,
trackSource: null,
trackBuffer:null,
isLoaded: false,
},
tracklist: [],
newTrack: function(filename){
var that=this;
var request =new XMLHttpRequest();
request.open("GET",filename,true);
request.responseType="arraybuffer";
request.onload=function(){
that.audioContext.decodeAudioData(request.response,function(buffer){
that.track.trackBuffer=buffer;
that.track.name=filename;
that.track.isLoaded=true;
that.track.trackSource=that.audioContext.createBufferSource();
console.log('track name '+ that.track.name);
console.log(that.track);
that.tracklist.push(that.track);
});
}
request.send();
},
您只有一个对象soundclass.track
。在request.onload
函数中,您可以一次又一次地修改同一个对象。所以你的tracklist
包含相同的对象两次。你能做的是
var track = {};
track.trackBuffer=buffer;
...
that.tracklist.push(track);
并删除soundclass.track.
相关文章:
- 作用域问题-此函数是否形成闭包-JavaScript
- 访问Javascript对象-Node.js的作用域问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 'simple'套接字中的作用域问题.IO服务器
- Javascript作用域问题,对象在分配后没有数据
- 可能存在Javascript作用域问题
- 本地Javascript作用域问题
- 设置Javascript函数的作用域问题
- Javascript 中使用 setTimeout 的作用域问题
- 作用域问题反应父子方法ES6
- jquery get中的作用域问题
- 绑定时出现Javascript作用域问题
- 试图覆盖全局变量时出现jQuery.post()作用域问题
- 作用域问题Uncaught ReferenceError
- 使用reduce串行链接Javascript承诺时的作用域问题
- Javascript变量作用域问题-错误:类型错误:this.graphics未定义
- extjs 4中的作用域问题
- 变量未正确赋值,可能存在作用域问题(getJSON()中的each()中有一个开关的函数)
- Javascript作用域问题:函数在$(doc).ready()中可用,但在事件处理程序中不可用
- Angular 2服务单例作用域问题