javascript - 强制带有变量的对象属性重新计算值

标签 javascript jquery object dom audio

我有一个对象,其属性可通过 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/

相关文章:

javascript - 使用 jquery 添加空 div 到图像

javascript - 如何在用户单击元素时触发声音

c++ - 通过引用使用临时对象和 args 的规则

javascript - 你如何追加一个元素,同时又保持它在原来的位置?

javascript - jQuery 验证后,联系表单不会提交

javascript - 如何使用 javascript 删除 html 表格行?

javascript - deviceReady 在PhoneGap 应用程序中不起作用,怎么办?

ruby-on-rails - Rails - 保存或删除后对象未刷新

javascript - 为什么是 {key : "value"} different from {"key" : "value"}?

javascript - 如何等比例拉伸(stretch)截面?