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打印台输出 附图:
附赠:
4.使用call和apply调用时,this是指定的那个对象
5.箭头函数:箭头函数本身没有this,看向外层是否有函数,如果有外层的this就是箭头函数的this,没有的话就是window