Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript事件侦听器don';不能在对象方法内部工作_Javascript_Javascript Objects_Addeventlistener - Fatal编程技术网

Javascript事件侦听器don';不能在对象方法内部工作

Javascript事件侦听器don';不能在对象方法内部工作,javascript,javascript-objects,addeventlistener,Javascript,Javascript Objects,Addeventlistener,考虑以下代码: function Elements() { this.mainSection = document.querySelector('.main-section'); this.searchBtn = document.getElementById('search'); this.searchBar = document.querySelector('.search-bar'); ... } var initiate = new Elemen

考虑以下代码:

function Elements() {
    this.mainSection = document.querySelector('.main-section');
    this.searchBtn = document.getElementById('search');
    this.searchBar = document.querySelector('.search-bar');
    ...
  }

  var initiate = new Elements();

  initiate.toggleBar = function() {
    console.log(this.mainSection);
  }

  initiate.addClick = function() {
    this.searchBtn.addEventListener('click', this.toggleBar );
  }

  initiate.addClick();
单击事件时,它返回未定义的
,并用括号自动运行函数

你为什么这样做

另外,我只是在学习Javascript,并尝试编写灵活的代码。这是我正在做的一个很好的实践,还是我把事情复杂化了?

你可以改变

this.searchBtn.addEventListener('click', this.toggleBar );

要使此代码正常工作:)


问题在于,当您将函数
this.toggleBar
分配给
addEventListener
时,函数
this.toggleBar
上下文丢失。有关详细信息,请参阅。

谢谢。这个解决方案适用于我的情况。我刚才在读关于“.bind()”的解释
this.searchBtn.addEventListener('click', this.toggleBar.bind(this));