函数this的三种指向

372 阅读1分钟

1.普通函数

以函数的形式调用 函数名()-->this永远指向window

2.构造函数

以构造函数的形式调用时 new 函数名()-->this指向实例对象

3.对象方法

以方法形式调用时 对象名.方法()-->this指向调用方法的对象

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
        1. 函数this指向 : 谁‘调用’我,我就指向谁
            1.1 普通函数:  函数名()         this -> window
            1.2 构造函数:  new 函数名()     this -> new创建实例
            1.3 对象方法:  对象名.方法名()   this -> 对象
        */

        let fn = function () {
            console.log(this)
        }

        //1.普通函数
        fn() // window
        //2.构造函数
        new fn() // fn{}
        //3.对象方法
        let obj = {
            name: '马超',
            eat: fn
        }
        obj.eat() // 马超
        
        let person = {
            name: '关羽',
            eat: function () {
                console.log(this)
            },
            learn: function () {
                let eat = this.eat
                eat()
            }
        }
        //打印几次this,分别打印什么
        person.eat() // 关羽
        person.learn() // window
    </script>
</body>

</html>

log打印台输出 附图:

image.png

附赠:

4.使用call和apply调用时,this是指定的那个对象

5.箭头函数:箭头函数本身没有this,看向外层是否有函数,如果有外层的this就是箭头函数的this,没有的话就是window