在 Javascript 对象中使用 HTML5 音频

Using HTML5 Audio in Javascript Objects

本文关键字:HTML5 音频 Javascript 对象      更新时间:2024-02-25

>当我运行以下内容时...

var obj = {
    array: ['1.mp3', '2.mp3', '3.mp3'],
    audio: new Audio(this.array[0])
};

。我收到一个错误,说它无法读取未定义的属性"0"。但是,当我运行以下内容时...

var obj = {
    array: ['1.mp3', '2.mp3', '3.mp3'],
};
var audio = new Audio(this.obj.array[0]);

。一切都很顺利。我将如何修复第一个示例?我做错了什么this吗?

我将如何修复第一个示例?我对this做错了什么吗?

你不能。对象尚未创建,因此无法使用this引用该属性

但是,您可以这样做

var obj = {
    array: ['1.mp3', '2.mp3', '3.mp3'],
}; // object now created
obj.audio = new Audio(this.obj.array[0]); // set the property.

请注意,您可以引用this来引用函数内部的obj,但不能引用函数外部的。

var obj = {
   prop: (console.log(this), "Some value") // most probably Window but never obj
   func: function(){
      console.log(this); // obj
   }
}

问题是在构造函数中使用this:它不是指obj,而是指新的 Audio 对象。您将无法像这样使用对象内部的this引用它。

执行相同操作的另一种方法如下:

var refArray = ['1.mp3', '2.mp3', '3.mp3']; var myObj = { array: ['1.mp3', '2.mp3', '3.mp3'], audio: new Audio(this.obj.array[0]); };

这与其他答案中所述的操作相同,但允许您在定义 myObj 变量时添加音频对象(作为 myObj 的属性(。