前端this指针

一、前端this

  1. 普通函数的调用指向全局对象
var x = 5
// 1. 普通函数的调用指向全局对象
function test(){
    var x = 1
    console.log(this.x)
}

test()   // 5
window.test() // 5

console.log('--------------------------')
  1. 作为对象方法调用,this指向上级对象
 var x =5;

 // 2. 作为对象方法调用,this指向上级对象
 function test2(){
     console.log(this.x)
 }

 var obj = {}
 obj.x = 2
 obj.f = test2
 obj.f() // 2

 obj = {
     x :2,
     f() {
         var that = this;

         function demo (){
             // demo不是方法里面的方法,所以this指向window
             // 具体:this.x 相当于 window.obj.x
             console.log(this.x) // 5
             console.log(that.x) // 2
         }

         demo()
     }
 }

 obj.f()
 // 方法里面的方法指向window
 // 看上以及块是谁,如果是一个对象那就是对象,如果是方法,你就不知道上一级块开辟的空间在哪
 // 这是可以把  对象.方法当成整体  window调用他们

 console.log('--------------------------')
  1. 作为构造函数 this指代new 出来的对象
 // 3. 作为构造函数 this指代new 出来的对象
 function test3(){
      this.x =3
      this.y =5
  }

  var myObj = new test3()
  // 按照常理来说会指向window
  // 因为window.myobj.x
  // 但这里时指向new出来的对象
  console.log(myObj.x) // 3

  function test4(){
      this.my = 5
  }

  var myObj2 = new test4()
  console.log(window.myObj2.my) // s5
  console.log('--------------------------')
  1. apply call bind 调用指代其绑定的镀锡 第一个参数,第一个参数不写默认为window
// 4. apply call bind 调用指代其绑定的镀锡 第一个参数,第一个参数不写默认为window
 var o = 66
 function func(){
     console.log(this.o)
 }

 var obj3 = {}
 obj3.o = 6
 obj3.f = func

 obj3.f()  // 6
 obj3.f.apply()  // 66   指向window
 obj3.f.apply(window)  // 66  指向window
 obj3.f.apply(obj3)  // 6  指向obj3


 // apply call bind
 // 1. apply    p1: this指向   p2: [name,age]   调用:立即调用
 // 1. call    p1: this指向   p2: 之后的参数,需要枚举出来 name,age   调用:立即调用
 // 1. bind    p1: this指向   p2: 之后的参数,需要枚举出来   调用:手动调用

 // 类
 function CLassName() {
     // 属性
     // 方法
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值