跟我学习javascript的this关键字

yizhihongxing

当编写 JavaScript 代码时,经常会使用 this 关键字。它可以引用当前上下文中的对象,其行为特点是动态绑定。但是,该关键字在不同的上下文环境中使用可能会产生不同的结果,这常常导致初学者的困惑。本文将深入讲解 JavaScript 的 this 关键字, 帮助初学者理解并正确运用它。

1. this关键字指向全局对象

在全局环境中,使用 this 关键字会指向全局对象,即浏览器中的 window, Node.js 环境中的 global。以下是一个简单的示例:

console.log(this); //输出结果为:Window {…} 或 global {...}

在浏览器控制台中,上述代码会输出全局对象 Window。

2. this关键字指向对象

当在对象内部使用函数时, this 关键字会指向该对象。例如:

let person = {
  name: "ZhangSan",
  age: 18,
  sayHello: function() {
    console.log("Hello, I am " + this.name + ", " + this.age + " years old.");
  }
}

person.sayHello(); //输出结果为:Hello, I am ZhangSan, 18 years old.

上述代码中,this 引用了 person 对象。因此,当调用 person.sayHello() 时,this 指向该对象,输出结果为:Hello, I am ZhangSan, 18 years old.

如果在普通函数内部使用 this 关键字时, this 将指向全局对象,而非最近的对象。例如:

let person = {
  name: "ZhangSan",
  age: 18,
  sayHello: function() {
    console.log("Hello, I am " + this.name + ", " + this.age + " years old.");
  },
  sayHi: function() {
    function inner() {
      console.log("Hi, I am " + this.name); //此处的this将指向全局对象
    }
    inner();
  }
}

person.sayHi(); //输出结果为:Hi, I am undefined

上述代码中,sayHi() 函数内部使用了普通函数 inner(), 导致其中的this关键字指向了全局对象。因此,在调用 person.sayHi() 时,输出结果为:Hi, I am undefined。

为了正确地引用 this 关键字,可以使用箭头函数来代替普通函数,因为箭头函数的 this 关键字可以按照所在上下文继承上一层作用域内的 this 值,不会改变其指向。例如:

let person = {
  name: "ZhangSan",
  age: 18,
  sayHello: function() {
    console.log("Hello, I am " + this.name + ", " + this.age + " years old.");
  },
  sayHi: function() {
    let inner = () => {
      console.log("Hi, I am " + this.name); //此处的this会继承最近的person对象
    }
    inner();
  }
}

person.sayHi(); //输出结果为:Hi, I am ZhangSan

在上述代码中,已经通过箭头函数确保了inner()中的 this 关键字指向了 person 对象。因此,在调用 person.sayHi() 时,输出结果为:Hi, I am ZhangSan。

除了上述内容,还有以下内容需要注意:

  • 在构造函数中,this 关键字指向新创建的对象,即构造函数的实例对象。
  • 在使用 call() 或 apply() 方法调用函数时,可以以参数的形式传递一个上下文(即 this 绑定的对象)。
  • 在使用 bind() 方法调用函数时,也可以指定函数内 this 的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:跟我学习javascript的this关键字 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JavaScript中的数据类型介绍

    当我们使用JavaScript进行编程时,数据类型是我们需要了解的基础之一。JavaScript中的数据类型包括基本数据类型和复杂数据类型。 基本数据类型 JavaScript中的基本数据类型有以下五种: 1.数字类型(Number) 表示数字,举个例子: let num = 3; 2.字符串类型(String) 表示字符串,举个例子: let str = …

    JavaScript 2023年5月18日
    00
  • 使用JavaScript制作一个简单的计数器的方法

    制作一个简单的计数器,可以使用 JavaScript 来完成。 首先,在 HTML 文件中添加一个按钮和一个用于显示计数的元素,代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &lt…

    JavaScript 2023年6月11日
    00
  • JS重要知识点小结

    JS重要知识点小结 1. 变量与数据类型 1.1 变量声明与赋值 在JS中,我们声明一个变量需要使用var关键字,赋值则使用=号,如下所示: var num = 5; //声明并赋值一个数值型变量 var str = ‘hello’; //声明并赋值一个字符串型变量 var arr = [1,2,3]; //声明并赋值一个数组型变量 1.2 数据类型 在JS…

    JavaScript 2023年6月10日
    00
  • JavaScript基本对象

    JavaScript基本对象是指在JavaScript中自带的对象,其中包括全局对象、数据类型、运算符、语句和函数等。 全局对象 全局对象是指在JavaScript中始终可用的对象,包括以下内容: window对象 window对象是浏览器的顶层对象,代表着当前页面或框架。该对象包含了大量实用的方法和属性,例如alert()方法、document属性等。 c…

    JavaScript 2023年5月18日
    00
  • 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

    针对“谈谈我对JavaScript原型和闭包系列理解(随手笔记8)”这个话题,我将提供以下攻略: 1. 原型 什么是原型 在JavaScript中,除了基本数据类型(Number、Boolean、String、Undefined、Null)、对象类型(Object)和函数类型(Function)外,还有一种被称为原型对象(Prototype Object)的…

    JavaScript 2023年6月10日
    00
  • 你真的了解JavaScript的作用域与闭包吗

    当我们开发JavaScript应用时,作用域和闭包是非常重要的概念,理解这两个概念能够提高我们的代码质量和编程技能。下面我来给大家分享一些关于JavaScript作用域和闭包的完整攻略。 了解JavaScript的作用域 在JavaScript中,变量的作用域有两种,全局作用域和局部作用域。 全局作用域 当变量在函数外声明时,它就具有了全局作用域。例如: v…

    JavaScript 2023年5月18日
    00
  • KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定

    KnockoutJS是一款流行的JavaScript库,针对一个web应用程序的建立提供了比较好的基础架构。其中,表单的数据绑定功能是KnockoutJS最为常用的功能之一。本文将详细讲解KnockoutJS 3.x API中与表单数据绑定相关的submit、enable、disable绑定和使用方法,并提供两个具体的示例说明。 一、submit绑定 sub…

    JavaScript 2023年6月10日
    00
  • JavaScript实现多态和继承的封装操作示例

    让我给您介绍一下“JavaScript实现多态和继承的封装操作示例”的完整攻略吧。 目录 多态的实现 方法重写 方法重载 继承的实现 原型链继承 借用构造函数继承 组合继承 多态的实现 多态是一种面向对象编程语言的特性,它允许不同的对象通过相同的接口来进行访问,在不同的对象上实现不同的行为。在 JavaScript 中,我们可以通过方法重写和方法重载来实现多…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部