认识javascript中的this

在javascript中this是一个神奇的东西,它在不同的使用情况下会有不同表现,相信对this没有详细了解的同学用着用着就开始放迷糊了。

今天我们讨论在不同执行环境中this的作用。

1. 在方法中,this 表示该方法所属的对象。

function A() {
    console.log(this);
}

A(); //Window

let obj = {};
obj.A = A;
obj.A(); //obj

同样是执行A方法,第一次执行时候打印了Window,是因为A在window的环境下运行,所以打印了Window。

第二次,我们将A方法挂载到了对象obj上,然后执行obj的A方法,此时A方法在obj的环境下运行,所以打印了obj。

 

由此,我们可以总结一个结论:方法中的this指向方法所属的对象。

 

2.  在单独使用中,this表示全局对象Window。

console.log(this); //Window

 

3. 在函数中,this 表示全局对象。

function A() {
    console.log(this);
}

A(); //Window

4. 在函数中,在严格模式下,this 是未定义的(undefined)。

console.log(this); //undefined

5. 在事件中,this表示接受监听事件的元素。

document.addEventListener("click", function() {
    console.log(this); //document
})

6. 在箭头函数中,this表示箭头函数外层函数(最近一层函数)的this。通俗来说,箭头函数不改变this指向。

document.addEventListener("click", function() {
    console.log(this); //document
    let o = {};
    o.A = () => {
        console.log(this);
    }

    o.A(); //document
});

这里我们需要注意,o.A()打印的是document,是因为我们A是箭头函数,箭头函数的this表示它外层执行环境中的this,也就是 事件监听中的this。

7. call、apply、bind这三个方法可以改变函数的this指向。

function A() {
    console.log(this);
}

let obj = {};

A.call(obj); // obj
A.bind(obj)(); // obj
A.apply(obj); //obj

 

以上就是this的各种规则,清楚的了解他们之后,相信以后开发中就不会因为this而犯迷糊了。

 

浅陋见识,不足之处,请大神指正。

posted @ 2020-11-17 20:08  一生舍给一座山  阅读(147)  评论(0编辑  收藏  举报