文章目录
前言
我只想说,JS也太难懂了。
参考文章:https://juejin.im/post/5b6676e6f265da0fa00a3a12
类别
1 全局环境中的“this”
在全局环境中, this相当于全局对象 global。但这只在 node中才有效。
原因是在JavaScript文件中, this等同于 module.exports而不是 global
2 函数中的“this”
函数中的 this值通常是由函数的调用方来定义。因此,每次执行函数,函数内的 this值可能都不一样。(严格模式产生影响)
如果我们使用 node运行下面的代码,得到的输出为 true 。如果在文件的顶部添加 “use strict”(严格模式),并再次运行它,将会得到一个 false输出,因为现在的 this值为 undefined 。
function rajat() {
console.log(this === global)
}
rajat()
3 构造函数中的“this”
JavaScript没有特定的构造函数。我们所能做的就是使用 new运算符将函数调用转换为构造函数调用,如上一节所示。
构造函数被调用时,会创建一个新对象并将其设置为函数的 this参数。构造函数会隐式的返回这个对象,除非我们明确的返回了另外一个对象。
return语句不会覆盖构造函数调用的唯一情形是,return语句返回的不是一个对象。在这种情况下,对象将包含原始值。
4 方法中的“this”
A 当函数作为对象的方法被调用时, this指向的是该对象,也称为函数调用的接收器(receiver)。
假设 hero对象有一个 dialogue方法 ,那么 dialogue中的 this值指向 hero本身。此时的 hero也被称为 dialogue方法调用的接收者。
B 如果我将 dialogue的引用存储在另一个变量中,并将该变量作为函数调用。 node运行代码 , this将返回 undefined ,因为该方法已经丢失了接收器。 this此时指向 global ,而不是 hero 。
const hero = {
heroName: "Batman",
dialogue() {
console.log(`I am