JavaScript中的this关键字使用方法总结

当我们编写 JavaScript 代码时,经常需要访问当前函数上下文中的数据。为了做到这一点,JavaScript 提供了一个关键字 thisthis 关键字表示当前函数所在的对象,它包含了当前函数执行时所依存的上下文信息。在 JavaScript 中,this 关键字的使用非常重要,学会正确地使用 this 关键字对于编写高质量的代码非常重要。

下面是 "JavaScript中的this关键字使用方法总结 "的完整攻略:

1. this 是什么

this 关键字代表当前函数执行时所依存的“上下文对象”。它指向与函数相关的对象,在本质上就是一个变量(一个专有的关键字)。在不同的情况下,this 关键字会有不同的值。在 JavaScript 中,this 关键字在声明时并不赋值,而是在函数被调用时根据执行环境确定的。

2. this 的指向

this 的指向主要取决于函数的执行方式和函数的定义位置。通常情况下,它有四种指向方式,分别是:

  • 全局对象(指 window 或者 global
  • 普通函数调用中 this 指向全局对象
  • 对象的方法调用中 this 指向其对象
  • 构造函数调用中,this 指向新创建的对象,即 new 关键字

下面分别进行例子演示。

例1

当函数独立调用的时候,this 关键字指向全局对象(在浏览器中就是 window 对象)。

// global scope
console.log(this === window); // true

// function scope
function myFunction() {
  console.log(this === window); // true
}

myFunction();

例2

当函数作为对象的方法调用时,this 关键字指向这个对象。

const person = {
  firstName: "John",
  lastName: "Doe",
  fullName: function () {
    console.log(this.firstName + " " + this.lastName);
    // this here points to the person object
    console.log(this === person);
  },
};

person.fullName(); // John Doe true

3. 如何显式地传递 this

对于需要访问和修改某个特定对象的函数来说,属性访问器中的 this 上下文可能是有用的。通过使用 call(), apply()bind() 方法,我们可以手动地设置 this 的值,以获得更好的控制和更大的灵活性。

例3

使用 call() 方法来设置 this :

const person1 = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
};

const person2 = {
  firstName:"John",
  lastName: "Doe",
};

// call the fullName method in the person1 object, but with person2 as the 'this'
console.log(person1.fullName.call(person2)); // John Doe

例4

使用 bind() 方法来设置 this :

const person1 = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
};

const person2 = {
  firstName:"John",
  lastName: "Doe",
};

const person2FullName = person1.fullName.bind(person2);
console.log(person2FullName()); // John Doe

4. 总结

this 是 JavaScript 中非常重要的一个关键字,它在函数调用时可以指向不同的对象,掌握 this 并且使用它可以让你编写高质量的 JavaScript 代码。注意函数的调用方式和定义位置非常重要,以及通过 call(), apply()bind() 这三种方法可以手动设置 this 的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中的this关键字使用方法总结 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 业务层hooks封装useSessionStorage实例详解

    “业务层hooks封装useSessionStorage实例详解”说明了如何使用React Hooks封装一个自定义的钩子函数useSessionStorage,来实现将数据存储到浏览器的Session Storage中。下面,我将为您详细讲解这一攻略的过程及示例。 一、为什么需要使用Session Storage? 浏览器提供了三种方式用于客户端存储数据:…

    JavaScript 2023年6月11日
    00
  • 每天一篇javascript学习小结(Date对象)

    下面是“每天一篇 JavaScript 学习小结(Date 对象)”的完整攻略: 简介 Date 对象是 JavaScript 的内置对象之一,它表示日期和时间,并提供了相关的方法和属性。 创建 Date 对象 你可以使用 Date 构造函数来创建一个 Date 对象。Date 构造函数可以接受多种格式的参数,包括年、月、日、时、分、秒等等。以下是一些示例:…

    JavaScript 2023年5月27日
    00
  • Web开发之JavaScript

    Web开发之JavaScript 一、JavaScript入门 1. JavaScript是什么 JavaScript是一种广泛应用于Web开发的脚本语言,主要用于为网页添加动态效果、实现交互功能等。 2. 学习JavaScript的基本要素 (1)掌握HTML和CSS的基本用法 在使用JavaScript进行Web开发时,HTML和CSS是最基本的语言。 …

    JavaScript 2023年5月18日
    00
  • 求js数组的最大值和最小值的四种方法

    针对“求js数组的最大值和最小值的四种方法”,我为您提供以下攻略: 方法一:使用Math.max()和Math.min() 我们可以使用Math.max()和Math.min()方法来获取一个数组中的最大值和最小值。 代码示例 const numbers = [3, 6, 2, 8, 1]; const max = Math.max(…numbers);…

    JavaScript 2023年5月27日
    00
  • 一种新的日期处理方式之JavaScript Temporal API

    一、JavaScript Temporal API简介 JavaScript Temporal API是一个新的JavaScript API,它提供了一种新的日期和时间处理方式,用于简化处理日期、时间和时间间隔的操作。它的设计目标是提供一个简单易用的API,能够处理所有的日期和时间操作,包括处理时区、分别取年月日等操作。 二、安装JavaScript Tem…

    JavaScript 2023年6月10日
    00
  • Backbone.js框架中Model与Collection的使用实例

    首先我们先来简单介绍一下Backbone.js框架。Backbone.js是一个轻量级的JavaScript框架,它提供了MVC(Model-View-Controller)的架构,方便我们在前端开发过程中管理数据状态和逻辑。在Backbone.js框架中,最常用的两个组件是Model和Collection。 Model:Model是指一个数据模型,它相当于…

    JavaScript 2023年6月10日
    00
  • JavaScript 对象成员的可见性说明

    JavaScript 对象成员的可见性是指对象中的属性和方法在不同情况下是否可以被访问到。在JS中,以下是对象成员的可见性说明: 公共成员 公共成员是对象中可以被外部访问到的属性和方法。在定义对象时,可以在对象的原型上定义公共成员,例如: function Person(name, age) { this.name = name; this.age = ag…

    JavaScript 2023年5月27日
    00
  • JavaScript创建对象的七种方式全面总结

    JavaScript创建对象的七种方式全面总结 在JavaScript中,有多种方式可以创建对象,本篇文章将介绍七种常用的创建对象的方式,并通过示例代码对其进行详细的讲解。 1. 对象字面量 最常用的创建对象的方式就是使用对象字面量,即在花括号内定义属性和值。 示例代码: var person = { name: "John", age:…

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