关于js this指向问题

最近想深入学习一下js,现在先了解一下this的指向问题。以前学过点c#,对this稍微

有些了解,按我自己的理解(不一定准确)this应该是计算机在运作的过程中分配的内存绑定:

1. 函数的this指向

普通函数在全局中被调用,this是指向window的(非严格模式下,严格模式下是undefined)

{
    let fn = function() {
        console.log(this);
    }
    fn();//全局调用所以this的指向是undefined(严格模式)

}


普通函数在对象中去调用,this是指向调用对象的箭头函数在对象中this的指向:

{
    let a = 123;
    let obj = {
        a: 12,
        fn: function() {
            console.log(this);
            console.log(this.a);
        }
    };
    obj.fn();//这里是对象调用this指向obj,this.a是12

}

首先我们先了解一下箭头函数关于this的基础知识

1.箭头函数作为函数的一种形式,对于this的处理和普通函数有所区别,它不会创建自己的this上下文,也就是说通过bind/call/apply函数方法设置this值时无效的,会被忽略;
2.因为箭头函数没有自己的this上下文,那么当它作为对象的方法函数运行时,this并不指向这个对象;
3.箭头函数的的函数体中出现的this在运行时绑定到最近的作用域上下文对象

4.你可以认为箭头函数的this和调用者无关,只和其定义时所在的上下文相关(箭头函数定义的时候就决定了上下文)

下面我们从代码来看一下:

//关于箭头函数的this
{
    let a = 123;
    let obj = {
        a: 12,
        fn: () => {
            console.log(this);
            console.log(this.a);
        }
    };
    obj.fn();//这里this指向undefined
}

//箭头函数需要用普通函数包裹一层才能正确指向

{
    let a = 123;
    let obj = {
        a: 12,
        fn: function() {
                let fn = () => {
                    console.log(this);
                    console.log(this.a);
                }
                fn();
             }
        }
        obj.fn(); //this指向obj,this.a为12
}

//作为构造函数被调用指向被返回的实例对象

{
    let a = 123;
    function fn() {
        this.a =12;
        console.log(this);
    //console.log(this.a);
    }
    let obj = new fn();
    console.log(obj.a);//12

}

Function.prototype.call()和Function.prototype.apply()调用,能动态改变传入函数的this指向

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值