javascript - 创建一个音频元素并在对象文字中赋予它属性

标签 javascript oop audio object-literal

我正在努力改掉编写意大利面条式代码的坏习惯。我在 modular javascript 上找到了一个很棒的教程我正在尝试将其应用到我的一个项目中。

我有这个:

var sfx = {}

sfx.mySound1 = document.createElement('audio');
sfx.mySound1.src = 'https://some-url.ogg';
sfx.mySound1.moreProps = "...";

sfx.mySound2 = document.createElement('audio');
sfx.mySound2.src = 'https://some-url.ogg';
sfx.mySound2.moreProps = "...";

在另一个对象中我可以播放这样的声音效果:

sfx.mySound1.play();

我想实现同样的目标,但我想使用对象文字模式:

const sfx = {
    mySound1: {
        // create audio element
        // give it props
    },
    mySound2: {
        // create audio element
        // give it props
    }
}

我似乎无法弄清楚如何创建音频元素并在同一对象中为其赋予属性。也许这违背逻辑并且不应该起作用。如果是这样,我应该如何编写它以将其全部保留在 sfx 对象 中?

最佳答案

试试这个:

var sfx = {
  mySound1: Object.assign(document.createElement('audio'), {
    src: 'https://some-url.ogg',
    moreProps: '...'
  }),

  mySound2: Object.assign(document.createElement('audio'), {
    src: 'https://some-url.ogg',
    moreProps: '...'
  })
}

The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.

看起来够清楚了,但是引用Object.assign()有关浏览器兼容性和 polyfill 的文档。

关于javascript - 创建一个音频元素并在对象文字中赋予它属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40100153/

相关文章:

c# - 如何在字段中存储所有 ctor 参数

c# - 在 C# 或 C++ 中将压缩的 wav 文件转换为未压缩的 wav 文件的最简单方法是什么?

javascript - jquery 将 html 拆分为几个 .append

javascript - this.userId 在 Meteor.publish 中返回 undefined

javascript - 使用 HTML5 防止用户在输入文本字段中输入非数字

javascript - 对象内部定义的函数没有返回值?

Java,用数据填充Object[][]数组

c++ - 指针+链表: Why am I getting this error?

objective-c - 我如何将音频文件存储在 sqlite3 数据库中并在 iphone 中播放?

ios - iOS:在播放其他应用程序时播放声音