js中改变this指向:call、applly、bind

不同情况下的this指向问题

全局情况定义函数的this指向为window

var str = 'var声明'
let str1 = 'let声明'
function fun() {
    console.log(this)
    console.log(this.str)
    console.log(this.str1)
}
fun()

在这里插入图片描述

改变this指向方法

call

var str = 'var声明'
let obj = {
    str: '我是obj内的str'
}

function fun() {
    console.log(this)
    console.log(this.str)
}
fun.call(obj) //立即执行
fun()

在这里插入图片描述

apply

var str = 'var声明'
let obj = {
    str: '我是obj内的str'
}

function fun() {
    console.log(this)
    console.log(this.str)
}
fun.apply(obj) //立即执行
fun()

在这里插入图片描述

bind

var str = 'var声明'
let obj = {
    str: '我是obj内的str'
}

function fun() {
    console.log(this)
    console.log(this.str)
}
let f1 = fun.bind(obj)//不会立即执行,需要调用执行
console.log(f1)
f1()
fun()

在这里插入图片描述

总结
相同点:

  1. 都是用来改变this指向的,且第一个参数为指向的this
  2. call和apply都是用在执行函数的时候
  3. 如果call和apply的第一个参数是null,那么this在node环境下指向的是global对象,在HTML中指向的是window对象
    call、apply、bind的不同点
  4. call和apply立即执行,而bind需要调用才执行
  5. 参数不同:apply的第二个参数格式为数组,而call和bind多个参数一一对应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值