什么是 'this' 关键词?
在 JavaScript 中,'this' 关键字包含对对象的引用。它表示函数或当前代码的上下文。它用于访问当前对象的属性和方法。
在函数中使用 this 关键字时,this 将引用调用函数时使用的对象。
在 JavaScript 中,函数也是对象。因此,您也可以将 'this' 关键字与 Functions 一起使用。
“this”指的是哪个对象?
'this' 关键字引用的对象取决于您如何使用 'this' 关键字。
例如
- 'this' 关键字引用全局范围内的 window 对象。
- 当你在函数中使用 'this' 关键字时,它也表示 'window' 对象。
- 'this' 关键字是指函数中 strict 模式下的 undefined。
- 在 object 方法中使用 'this' 关键字时引用该对象。
- 在事件处理程序中,'this' 关键字引用执行事件的元素。
- call()、apply() 和 bind() 等方法中的 'this' 关键字可以引用不同的对象。
语法
按照下面的语法在 JavaScript 中使用 'this' 关键字 &minus
您可以使用 'this' 关键字访问属性并执行对象的方法。
全局范围内的 JavaScript 'this'
在全局范围内使用 'this' 关键字时,它表示全局 (window) 对象。您可以在全局范围内使用 'this' 关键字访问全局变量。
例在下面的代码中,我们在全局范围内定义了 'num' 变量和 printNum() 函数。之后,我们使用 'this' 关键字来访问全局变量和函数。
输出
Outside the function: 10
函数中的 JavaScript 'this'
当你在函数中使用 'this' 关键字时,它表示全局范围或 'window' 对象。
例在下面的代码中,我们在函数中使用 'this' 关键字。你可以观察到,我们使用函数内的 'this' 关键字来访问全局变量。
输出
严格模式下的函数中的 'this'
当你在 strict 模式下在函数中使用 'this' 关键字时,它不会引用任何对象。'this' 关键字的值变为 undefined。
例在下面的代码中,我们在 strict 模式下在函数内部使用 'this' 关键字。它打印 undefined。
输出
构造函数中的 'this'
当您使用函数作为构造函数创建对象时,“this”关键字引用该对象。
例我们在下面的代码中定义了 Animal() 构造函数。我们在构造函数中使用了 'this' 关键字来初始化对象的属性。
输出
Animal Age: 3
Animal Color: Brown
箭头函数中的 'this'
当您在箭头函数中使用 'this' 关键字时,它引用其父对象的范围。
例如,当您在 object 方法中定义 arrow 函数并在其中使用 'this' 关键字时,它会呈现对象。如果你在另一个函数中定义箭头函数,则 'this' 关键字引用全局对象。
例在下面的代码中,我们在对象的 getDetails() 方法中定义了箭头函数。当我们打印 'this' 关键字的值时,它会打印对象。
输出
Value of 'this' inside the getInnerDetails() method: {"size":"10","color":"blue"}
object 方法中的 'this'
当你在 object 方法中使用 'this' 关键字时,它表示对象本身。
例在下面的代码中,我们定义了 'fruit;对象。该对象包含 printFruitDetails() 方法,在该方法中,我们使用 'this' 关键字来访问对象的属性。
输出
Fruit Color = red
object 方法的子函数中的 'this'
当您在 object 方法中定义函数并在函数中使用 'this' 关键字时,它表示全局对象而不是对象。
例:在下面的代码中,我们定义了 person 对象。person 对象包含 printDetails() 方法。在 printDetails() 方法中,我们定义了 printThis() 函数。
在 printThis() 函数中,我们打印 'this' 关键字的值,然后它打印全局对象。
输出
事件处理程序中的 JavaScript 'this'
将 'this' 关键字与事件处理程序一起使用是指执行事件的 HTML 元素。
例在下面的代码中,我们已将 onClick 事件处理程序添加到 <div> 元素中。当用户点击 div 元素时,我们使用 'display' 属性隐藏 div 元素。
JavaScript 显式函数绑定
在 JavaScript 中,call()、apply() 或 bind() 方法用于显式绑定。
显式绑定允许您借用特定对象的方法。使用这些方法,您可以显式定义 'this' 关键字的上下文。
让我们使用下面的示例来理解显式绑定。
示例:使用 call() 方法
在下面的代码中,lion 对象包含 color 和 age 属性。它还包含 printDetails() 方法,并使用 'this' 关键字打印详细信息。
tiger 对象仅包含 color 和 age 属性。我们使用 call() 方法通过 tiger 对象的上下文调用 lion 对象的 printDetails() 方法。因此,该方法在输出中打印 tiger 的详细信息。
输出
Age: 15
示例:使用 bind() 方法
下面的代码还包含 lion 和 tiger 对象。之后,我们使用 bind() 方法将 lion 对象的 printDetails() 方法绑定到 tiger 对象中。
之后,我们使用 tigerDetails() 方法打印 tiger 对象的详细信息。
输出
Age: 15
JavaScript 'this' 优先级
您应该使用以下优先顺序来确定 'this' 关键字的上下文。
- 1. bind() 方法
- 2. call 和 apply() 方法
- 3. 对象方法
- 4. 全球范围