2016-12-26 106 views
-1

我有一个javascript中的类的数组,每个实例都是通过它创建一个mp3文件的名字。这个想法是每个实例都会创建一个“不可见”的音频元素和一个div。当你点击div时,这里是音频。JavaScript对象指针

这是类的简化版本...我试图通过一个指向相应类的指针到“onclick”函数的每一次尝试失败..“this”显然失败,下面的示例失败.. 我已经临时解决了这个问题,将类传递给“idx”,然后传给div.onclick,所以它“发现自己”,但我确信有一个更优雅的解决方案,将div引用传递给适当的音频元素来玩。

function myClass (mp3file) { 
    this.aud = document.createElement('audio'); 
    this.aud.src = mp3file; 
    this.div = document.createElement('div'); 
    this.div.className = 'dictDiv';  
    this.context = this; 
    this.div.onclick = function() { 
     context.aud.play(); 
    }   
} 
+0

背景=这个... –

回答

1
var context = this; 
this.div.onclick = function() { 
context.aud.play(); 
} 

的onclick覆盖这一点,所以这个难道不上班工作。你可以把它存储在范围(参见上图)或覆盖该绑定:

this.div.onclick=function(){ 
this.div.appendChild(this.aud); 
this.aud.play(); 
}.bind(this); 
document.body.appendChild(this.div); 
+0

一件事乔纳斯..第一个例子(与上下文=本)不为我工作! – Francesco

+0

因为我还需要闪烁股利,以前使用这指的是DIV本身(ilel的onclick = ...
Francesco

+0

 this.div.onclick=function(){ 
this.div.innerHTML = this.phon;
this.div.style.backgroundColor = '#AAFFAA';
setTimeout(function() {
this.div.innerHTML = "?";
this.div.style.backgroundColor = 'yellow';
}, 3000);
this.audio.play();

}.bind(this)
Francesco