JS 里的 this

this 总是返回一个对象;
this就是属性或方法“当前”所在的对象;
如果用一个对象调用一个函数,那么这个对象就是 该函数里的 this;
改成 call() ,this 就是 call() 的第一个参数;
箭头函数没有 this ,箭头函数内外 this 不变,向上找。

!function(){
  var view = document.querySelector('#topNavBar')
  var controller = {
    view: null,
    init: function(view){
      this.view = view
      this.bindEvents() 
      //转换成 this.bindEvents.call(this),bindEvents() 里的 this 就是左边的 this
    },
    bindEvents: function(){
      window.addEventListener('scroll', (x) => {
        if(window.scrollY > 0){
          this.active()
        }
        else{
          this.deactive()
        }
      })
    },
    active: function(){
      this.view.classList.add('sticky')
    },
    deactive: function(){
      this.view.classList.remove('sticky')
    }
  }
  controller.init(view) 
  //转换成 controller.init.call(controller,view) ,init 函数里的 this 就是对象 controller
}.call()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在我的彻底理解js的执行上下文,以及变量对象中我说过,执行上下文是在函数被调用的时候被创建的,其中包括创建变量对象...
    csRyan阅读 1,399评论 1 11
  • 1. this之谜 在JavaScript中,this是当前执行函数的上下文。因为JavaScript有4种不同的...
    百里少龙阅读 1,033评论 0 3
  • 1.概念 在JavaScript中,this 是指当前函数中正在执行的上下文环境,因为这门语言拥有四种不同的函数调...
    BluesCurry阅读 1,156评论 0 2
  • 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 上面代码检查函数l...
    陈老板_阅读 465评论 0 1
  • 明天体育考试,虽然一听就知道不是什么好东西,但是,体育考试真的,我真的曾经幻想自己能拿第一。 我以为自己每天跑步,...
    芈霓阅读 163评论 0 0