this的值在函数调用时动态确定,指向执行上下文的“主人”对象:普通调用指向全局对象或undefined,方法调用指向调用对象,构造调用指向新实例,显式绑定可强制指定,箭头函数则继承外层this且不可变。

this 是 JavaScript 中一个特殊的关键字,它的值**不是在函数定义时确定的,而是在函数被调用时动态决定的**。它指向当前执行上下文(execution context)中的“主人”对象,也就是**谁调用了这个函数,this 通常就指向谁**——但有例外,取决于调用方式。
普通函数调用:this 指向全局对象(非严格模式)或 undefined(严格模式)
直接写 foo() 调用,没有点号、没有绑定、没有 new:
例如:
function say() { console.log(this); }
say(); // 非严格:window;严格:undefined
方法调用:this 指向调用它的那个对象
当函数作为对象的属性被调用(即用 obj.method() 形式),this 指向该对象:
本文档主要讲述的是Python开发网站指南;HTML是网络的通用语言,一种简单、通用的全置标记语言。它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器 Python和其他程序语言一样,有自身的一套流程控制语句,而且这些语句的语法和其它程序语言类似,都有for, if ,while 类的关键字来表达程序流程。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
立即学习“Java免费学习笔记(深入)”;
-
person.getName()→this指向person - 注意:只是赋值引用后调用会丢失 this,比如
const fn = obj.method; fn();就退化为普通调用
构造函数调用:this 指向新创建的实例
用 new 关键字调用函数时,JavaScript 会自动创建一个空对象,并把 this 绑定到它身上:
-
new Person()→this是一个新的Person实例 - 函数内部可通过
this.xxx = xxx给实例添加属性
显式绑定与箭头函数:this 不可变
call、apply、bind 可强制指定 this 值;而箭头函数没有自己的 this,它会沿作用域链向上查找外层普通函数的 this,且无法被修改:
-
obj.fn.call(otherObj)→this强制为otherObj -
const arrow = () => console.log(this);→this和定义时外层函数一致,调用时不能改









