js中的this

一句话,call的第一个参数

看几个例子
例1.

button1.onclick = function(){
  console.log(this)
}

这里的this是什么?
不要靠猜,是call的第一个参数,不知道去看MDN。
MDN的解释:处理器里的 this 值是触发事件的元素。

所以这里的this肯定就是button了

我们可以这样来改一改:

button1.onclick = function(){
  console.log(this)
}

button1.onclick.call({name: 'hua'})

这里就非常明显,this就是call的第一个参数。

例2.

button2.addEventListener('click',function(){
  console.log(this)
})

MDN的解释:通常来说this的值是触发事件的元素的引用
所以this肯定是button
例3.

$('ul').on('click', 'li', function(){
  console.log(this)
})

文档解释:当jQuery的调用处理程序时,this关键字指向的是当前正在执行事件的元素。对于直接事件而言,this 代表绑定事件的元素。对于代理事件而言,this 则代表了与 selector 相匹配的元素。
在这个例子中selector就是li,所以this就是li

例4.

function X(){
  return object = {
    name: 'object',
    f1(x){
      x.f2()  //调用options中的f2
    },
    f2(){
      console.log('object')
      console.log(this)
    }
  }
}

var options = {
  name: 'options',
  f1(){},
  f2(){
    console.log('options')
    console.log(this)  //打印
  }
}

var x = X()
x.f1(options)

会打印出什么呢?

做一个分析:x就是X返回的东西,也就是object,接下来调用object中的f1,并且传入options,那么f1中的x.f2(),实际上调用的是options中的f2,所以this指向options,打印出options

例5.
对上边的做一个修改

function X(){
  return object = {
    name: 'object',
    options: null,
    f1(x){      // 传入options
      this.options = x    //将自身的options也变为传入的options
      this.f2()     //this,还是自己,调用obejct的f2
    },
    f2(){
      this.options.f2.call(this)  //this.options是options,调用它的f2,并且将object当做this传过去
    }
  }
}

var options = {
  name: 'options',
  f1(){},
  f2(){
    console.log('options')
    console.log(this)  //打印
  }
}

var x = X()
x.f1(options)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目标:js中this的指向? 问题的引出 指出this指向什么 js中函数的三种调用形式 func(p1, p2)...
    放风筝的小小马阅读 273评论 0 0
  • 初学JavaScript经常被this绕晕,所以我总结一下JavaScript中的this。首先声明本文讨论的是非...
    NSO阅读 283评论 0 1
  • JS 中的this到底是什么 首先说结论: fn.call (context,argument[]) ,this ...
    _刘小c阅读 336评论 0 1
  • 与其他语言相比,函数的 this 关键字在JavaScript中的行为略有不同。它在严格模式和非严格模式之间也有一...
    _july77阅读 209评论 0 1
  • Javascript中的上下文,我认识的三个阶段 原作者:一狂 js 中的 上下文 Context,可以说是一个,...
    ipursue阅读 433评论 0 1

友情链接更多精彩内容