美文网首页
JS中搞不懂的this

JS中搞不懂的this

作者: 凉城十月 | 来源:发表于2020-08-25 11:44 被阅读0次

    this.call()的第一个参数,如果没有call,那么去问mdn,你这个方法/函数的this是什么呀。
    1.thisbutton

    button.onclick = function(){
     console.log(this) //触发事件的元素,button
    }
    

    onclick后面是一个function,在函数内,this 是触发当前事件的元素。

    2.thisbutton

    button.addEventListener(‘click’,function(){
      console.log(this) //该元素的引用,button
    })
    

    当使用 addEventListener() 为一个元素注册事件的时候,句柄里的 this值是该元素的引用。
    3.thisli

    $('ul').on('click','li'/*与selector相匹配的元素*/,function(){
      console.log(this)//this代表了与selector相匹配的元素
        //li元素
    })
    

    jQuery的调用处理程序时,this关键字指向的是当前正在执行事件的元素。对于直接事件而言,this代表绑定事件的元素。对于代理事件而言,this 则代表了与 selector相匹配的元素。

    关于this的魔鬼题目
    function X(){
      return object = {
        name: 'object',
        f1(x){
          x.f2()
        },
        f2(){
          console.log(this) //A,object/options
        }
      }
    }
    var options = {
      name: 'options',
      f1(){},
      f2(){
        console.log(this) //B,object/options
      }
    }
    var x = X()
    x.f1(options)
    

    问调用的是A还是B?打印出来的是什么?
    B,options

    function X(){
      return object = {
        name: 'object',
        f1(x){
          x.f2.call(this)
        },
        f2(){
          console.log(this) //C,object/options
        }
      }
    }
    var options = {
      name: 'options',
      f1(){},
      f2(){
        console.log(this) //D,object/options
      }
    }
    var x = X()
    x.f1(options)
    

    D,object

    function X(){
      return object = {
        name: 'object',
        f1(x){
          this.options = x
          this.f2()
        },
        f2(){
          this.options.f2.call(this)//this.options就是x
        }
      }
    }
    var options = {
      name: 'options',
      f1(){},
      f2(){
        console.log(this) //this === object
      }
    }
    var x = X()
    x.f1(options)
    

    打印出来的this===object

    相关文章

      网友评论

          本文标题:JS中搞不懂的this

          本文链接:https://www.haomeiwen.com/subject/ueuajktx.html