我有一个对象,其属性可通过 Howler.js 库加载声音样本。
样本的部分路径是通过mode变量确定的,可以是A、B、C等,都是有效的文件夹,包含名称相同但声音略有不同的声音样本。
var mode = "A";
$("html").on("keydown", function(e){
if(e.keyCode === 32) {
switch (mode) {
case "A":
mode = "B";
break;
case "B":
mode = "C";
break;
.
.
.
default:
mode = "A";
}
}
dict["coolSound"].sound.play();
});
// Seperate file
var dictionary = {
coolSound: {
sound: new Howl({
src: ["sounds/" + mode + "/bubbles.mp3"]
})
};
通过按键,我将模式变量更改为下一个字母。 但是,播放的声音是生成的原始声音。
我尝试让它调用一个设置声音的函数,但这也不起作用。
我在主字典对象中有多个像这样的对象和属性。有没有办法在不手动循环的情况下更新属性?
最佳答案
不,您在代码开头设置的属性只是一个字符串,它不记得它是由字符串、变量和字符串组成的。
您可以做的是使用函数而不是字符串值。例如:
var dictionary = {
coolSound: {
sound: function (mode) {
return new Howl({src: ["sounds/" + mode + "/bubbles.mp3"]});
}
}
}
然后,在您的 keydown 处理程序中您可以执行以下操作:
dict["coolSound"].sound(mode).play();
关于javascript - 强制带有变量的对象属性重新计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45110806/