在 Javascript 个对象中使用 HTML5 个音频

Using HTML5 Audio in Javascript Objects

当我运行以下...

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 我是不是做错了什么?

How would I fix the first example? Am I doing something wrong with 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)。