32-this的理解

this的理解

在一般的函数里面this他就指向全局对象 window 不管这个函数被包裹几层 他指向window
1.如果这个函数被绑定在一个对象里面那么这个this将会被隐式的指向这个对象 如果这个函数在进行嵌套一个函数的话 那么所嵌套的那个函数的this执行window
## this的脱离绑定

  • 指一个区域块的this被保存(提升)在全局里面此时的this就指向全局了
-------------案例-------------------
var obj = {
    a: 1, // a是定义在对象obj中的属性 1
    fire: function () {
        console.log(this.a)
    }
}
var a = 2; // a是定义在全局环境中的变量 2
obj.fire(); //1  此时fire的指向时obj
var fireInGrobal = obj.fire; //因为fireInGrobal是全局变量,this对于obj的绑定丢失,绑定到了全局window
fireInGrobal(); // 输出 2 输出全局变量啊


//在这里因为obj里面的函数被保存在全局变量里面了 此时的this的指向也相对的提升了

改变this的执行的几种方法

      1. call()  

语法格式:

里面包含this需要更改指向的函数.call(被指向的对象,实参1,实参2,....)

例如:

如:

  2. apply()

语法格式: 

里面包含this需要更改指向的函数.apply(被指向的对象,[参数1,参数2.。。])

//apply()和call()十分相似 只是传参的形式是数组


  3. bind()

语法格式: 

里面包含this需要更改指向的函数.bind(被指向的对象,参数1,参数2.。。) ()

// bind() 改变了this的指向 根据需求后面要在加()调用一下这个函数  如不加()则是只改变指向 没有调用

解决this的作用域问题

  • 通常我们在子函数里面想要使用外层函数的this但这个this总是指向window 此时我们可以将this储存在一个变量里面来进行调用就解决了

如:

储存this的案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值