前端开发核心知识进阶 —— this指向问题

前端开发核心知识进阶 —— this指向问题

规律

  • 在函数体中,非显示或隐式地简单调用调用函数时,在严格模式下,函数内的this会被绑定在到undefined中,在非严格模式下则会被绑定到全局对象window/global
  • 一般使用new方法调用构造函数时,构造函数内的this会被绑定到新创建的对象上
  • 一般通过call/apply/bind方法显示调用函数时,函数体内的this会被绑定到制定参数的对象上
  • 一般通过上下文调用函数时,函数体内的this会被绑定到该对象上
  • 箭头函数中,this的指向是由外层(函数或全局)作用域来决定的

上下文对象调用中的this

const student = {
	name:'Lucas',
	fn:function(){
		return this
	}
}
console.log(student.fn() === student) // true

当存在更复杂的调用关系时,如以下代码中的嵌套关系,this会指向最后调用它的对象

const Person = {
    name:'Lucas',
    brother:{
        name:'Mike',
        fn:function(){
            return this.name
        }
    }
}

console.log(person.brother.fn()) // Mike

const o1 = {
    text:'o1',
    fn:function(){
        return this.text
    }
}

const o2 = {
    text:'o2',
    fn:function(){
        return o1.fn()
    }
}

const o3 = {
    text:'o3',
    fn:function(){
        var fn = o1.fn
        return fn()
    }
}

console.log(o1.fn()) // o1
console.log(o2.fn()) // o1
console.log(o3.fn()) // undefined

第一、二个console.logfn()this的指向都是fn的调用方,即谁调用了fnthis就指向谁
第三个console.log可以转换为以下代码,在函数中隐式调用函数,this指向undefinedwindow

const o3 = {
    text:'o3',
    fn:function(){
        return function(){
            return this.text
        }()
    }
}

如何让console.log(o2.fn())语句输出o2

const o1 = {
    text:'o1',
    fn:function(){
        return this.text
    }
}

const o2 = {
    text:'o2',
    fn:o1.fn
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值