Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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 在下面的代码中,这个对象如何在addEventListener方法上工作?_Javascript_This_Dom Events - Fatal编程技术网

Javascript 在下面的代码中,这个对象如何在addEventListener方法上工作?

Javascript 在下面的代码中,这个对象如何在addEventListener方法上工作?,javascript,this,dom-events,Javascript,This,Dom Events,看 我有以下Html代码: <table id="outside"> <tr><td id="t1">one</td></tr> <tr><td id="t2">two</td></tr> </table> 执行Something(),此引用窗口对象。所以onclick1和onclick2是Windo

我有以下Html代码:

<table id="outside">
    <tr><td id="t1">one</td></tr>
    <tr><td id="t2">two</td></tr>
</table>
执行
Something()
引用
窗口
对象。所以
onclick1
onclick2
Window
对象上的方法

怀疑:

  • el.addEventListener('click',this.onclick1,false)时
    this中执行
    this
    对象。单击1
    引用
    el
    对象。那么,当触发事件时,为什么调用
    onclick1
    方法(这是
    window
    对象的方法)。
    onclick1
    方法应该调用
    window
    对象,而不是
    el
    对象
  • 在el.addEventListener中('click',this.onclick2.bind(this),false)this.onclick2和
    onclick2.bind(this)
    中的
    this
    对象有何不同

  • 此示例取自事件处理程序将事件目标的元素作为
    This
    对象传递

    Function.bind()
    强制被调用函数的
    this
    对象成为特定对象,即要绑定的参数

    如果在创建处理程序函数时未使用
    fn.bind(thisObject)
    覆盖
    ,则它将默认为事件目标(如问题中的MDN链接所述)。如果这样做,它将是您指定为
    .bind()
    参数的任何对象

    有关
    .bind()
    的其他信息:

    var el = document.getElementById("outside");
    var Something = function(element) {
      this.name = 'Something Good';
      this.onclick1 = function(event) {
        console.log(this.name); // undefined, as this is the element
      };
      this.onclick2 = function(event) {
        console.log(this.name); // 'Something Good'
      };
      el.addEventListener('click', this.onclick1, false);
      el.addEventListener('click', this.onclick2.bind(this), false); 
    }
    Something();