几个例子深刻理解this

  /*this:
  * 1. 解析器在每次调用函数的时候都会传递一个隐含参数this,指向一个对象(称为函数执行的上下文对象)
  * 2. 任何函数本质上都是通过某个对象来调用的,如果没有指定,则这个对象为window
  * 3. 以方法的形式调用,this就指向调用方法的那个对象*/
  
  /*总结:
  * 1. test() window
  * 2. p.test() p
  * 3. new test() 新创建的对象
  * 4. p.call/apply(obj) obj
  * */
  var name = '全局name' //var有变量提升,window中有name,换成let const window中无name
  function fun(){
    console.log(this.name)
  }

  let obj = {
    name: "obj里name",
    getName: fun
  }
  fun()
  obj.getName()

  function Fun(name) {
    console.log(this)
    this.name = name

    this.getName = function(){
      console.log(this)
      return this.name
    }

    this.setName = function(name){
      console.log(this)
      this.name = name
    }
  }

  Fun('li') //this为window
  let p = new Fun() //此语句会执行,this为新创建的对象Fun,而p指向这个对象,所以也能说指向p
  p.getName() //Fun对象(p) p.getName获得getName这个函数
  let obj = {}
  p.setName.call(obj,'wang')  //obj
  let x = p.setName() //Fun对象(p)
  let y = p.setName
  y() //window

  function f1(){
    function f2(){
      console.log(this)
    }
    f2()
  }
  f1()  //f1()其实就是执行f2(),而f2()没有调用,所以为window
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值