2016-12-26 140 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