javascript闭包未捕获类型错误:无法读取属性';请求';未定义的
我正试图通过使用for循环对对象列表的过程进行迭代来减少以前工作过的一些重复代码javascript闭包未捕获类型错误:无法读取属性';请求';未定义的,javascript,closures,typeerror,web-audio-api,Javascript,Closures,Typeerror,Web Audio Api,我正试图通过使用for循环对对象列表的过程进行迭代来减少以前工作过的一些重复代码 var context = new (window.AudioContext || window.webkitAudioContext)(); //Set up the objects for each part var solo = { audio: context.createBufferSource(), audioData: context.createBufferSource(),
var context = new (window.AudioContext || window.webkitAudioContext)();
//Set up the objects for each part
var solo = { audio: context.createBufferSource(),
audioData: context.createBufferSource(),
file: "mp3s/Faith_solo.mp3",
request: new XMLHttpRequest(),
isPlaying: false,
startTime: null,
seekAsOfLastPause: 0,
duration: 0
}
var t1 = { audio: context.createBufferSource(),
audioData: context.createBufferSource(),
file: "mp3s/Faith_t1.mp3",
request: new XMLHttpRequest(),
isPlaying: false,
startTime: null,
seekAsOfLastPause: 0,
duration: 0
}
var t2 = { audio: context.createBufferSource(),
audioData: context.createBufferSource(),
file: "mp3s/Faith_t2.mp3",
request: new XMLHttpRequest(),
isPlaying: false,
startTime: null,
seekAsOfLastPause: 0,
duration: 0
}
var baritone = {
audio: context.createBufferSource(),
audioData: context.createBufferSource(),
file: "mp3s/Faith_baritone.mp3",
request: new XMLHttpRequest(),
isPlaying: false,
startTime: null,
seekAsOfLastPause: 0,
duration: 0
}
var bass = { audio: context.createBufferSource(),
audioData: context.createBufferSource(),
file: "mp3s/Faith_bass.mp3",
request: new XMLHttpRequest(),
isPlaying: false,
startTime: null,
seekAsOfLastPause: 0,
duration: 0
}
var allParts = [solo, t1, t2, baritone, bass];
/* create requests, send requests, load files */
for(i=0;i<allParts.length;i++){
allParts[i].request.open("GET", allParts[i].file, true);
allParts[i].request.responseType = "arraybuffer";
allParts[i].request.onload = function(){
**context.decodeAudioData(allParts[i].request.response, onDecoded);**
}
function onDecoded(buffer){
allParts[i].audioData.buffer = buffer;
}
allParts[i].request.send();
}
var context=new(window.AudioContext | | window.webkitadiocontext)();
//为每个零件设置对象
var solo={audio:context.createBufferSource(),
audioData:context.createBufferSource(),
文件:“mp3s/Faith_solo.mp3”,
请求:新建XMLHttpRequest(),
isplay:false,
开始时间:空,
请参见LastPause:0,
持续时间:0
}
var t1={audio:context.createBufferSource(),
audioData:context.createBufferSource(),
文件:“mp3s/Faith_t1.mp3”,
请求:新建XMLHttpRequest(),
isplay:false,
开始时间:空,
请参见LastPause:0,
持续时间:0
}
var t2={audio:context.createBufferSource(),
audioData:context.createBufferSource(),
文件:“mp3s/Faith_t2.mp3”,
请求:新建XMLHttpRequest(),
isplay:false,
开始时间:空,
请参见LastPause:0,
持续时间:0
}
男中音={
音频:context.createBufferSource(),
audioData:context.createBufferSource(),
文件:“mp3s/Faith\u baritone.mp3”,
请求:新建XMLHttpRequest(),
isplay:false,
开始时间:空,
请参见LastPause:0,
持续时间:0
}
var bass={audio:context.createBufferSource(),
audioData:context.createBufferSource(),
文件:“mp3s/Faith_bass.mp3”,
请求:新建XMLHttpRequest(),
isplay:false,
开始时间:空,
请参见LastPause:0,
持续时间:0
}
var allParts=[独奏、t1、t2、男中音、低音];
/*创建请求、发送请求、加载文件*/
对于(i=0;i,您需要使用let.或使用forEach或allParts.map在循环中定义i
for(let i=0;i<allParts.length;i++){ ...
可能重复感谢链接此。我查看了for循环并将其更改为forEach,它似乎可以解决此问题!是的,这似乎可以解决此问题。我更新了使用forEach的函数。非常感谢!
allParts.map(function(part, i){ ... })