【问题标题】:javascript object pointer to this [duplicate]指向此的javascript对象指针[重复]
【发布时间】:2016-12-26 10:02:16
【问题描述】:

我在 javascript 中有一个类数组,每个实例都是通过传递 mp3 文件的名称创建的。这个想法是每个实例创建一个“不可见”的音频元素和一个 div。当您单击 div 时,您会看到这里的音频。

这是该类的简化版本...我尝试将指向适当类的指针传递给“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();
    }           
}

【问题讨论】:

  • context=this...

标签: javascript html css this


【解决方案1】:
var context = this;
 this.div.onclick = function () { 
context.aud.play();
} 

Onclick 会覆盖此内容,因此无法使用此内容。您可以将其存储在范围内(见顶部)或覆盖 this 绑定:

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

【讨论】:

  • 只有一件事 Jonas .. 第一个示例(使用 context=this)对我不起作用!
  • 因为我还需要刷新 div,之前使用它来引用 div 本身(ilel onclick= ...
  •  this.div.onclick=function(){ 
    this.div.innerHTML = this.phon;
    this.div.style.backgroundColor = '#AAFFAA';
    setTimeout(function () {
    this.div.innerHTML = "?";
    this.div.style.backgroundColor = '黄色';
    }, 3000);
    this.audio.play();

    }.bind(this)
  • ibe 错过了正确的声明 var 尝试编辑
  • 音频元素 + div 在您的代码中不存在,如果您将它们附加到页面,它们只会存在,请参阅编辑
猜你喜欢
  • 2013-08-23
  • 2019-10-11
  • 2023-02-09
  • 2010-10-27
  • 2017-06-29
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多