精通JavaScript的this关键字

yizhihongxing

如何精通 JavaScript 的 this 关键字?

了解上下文

this 关键字的值取决于函数被调用时的上下文。在 JavaScript 中,上下文默认是全局对象,但在函数中,上下文可能会被更改。为了更好地了解 this 关键字,我们需要了解上下文是如何被定义和更改的。

示例一:默认上下文是全局对象,设置 this 的方式是使用函数调用绑定。

function logThis() {
  console.log(this); //默认情况下,this 指向全局对象
}

logThis(); // 输出:Window { ... }

示例二:通过对象调用函数,将函数绑定到该对象上,从而修改 this 的上下文。

const obj = {
  name: 'Hannah',
  logName() {
    console.log(this.name); // 此时,this 的上下文设置成了 obj 对象,输出:Hannah
  }
};

obj.logName();

理解 this 的四种绑定规则

当 this 作为函数的参数进行调用时,它的绑定方式可以分为四种情况。

  1. 默认绑定 - 当前上下文是全局对象或 undefined。
function logThis() {
  console.log(this); //默认情况下,this 指向全局对象
}

logThis(); // 输出:Window { ... }
  1. 隐式绑定 - 当前上下文是对象字面量或属性访问。
const obj = {
  name: 'Hannah',
  logName() {
    console.log(this.name); // this 被隐式绑定为 obj, 输出: Hannah
  }
};

obj.logName();
  1. 显式绑定 - apply 和 call 方法用来手动绑定 this 到函数中。
function logThis() {
  console.log(this);
}

const obj = { name: 'Hannah'};
logThis.call(obj); // 输出:{ name: 'Hannah' }
  1. new 绑定 - this 绑定到由构造函数新创建的对象。
function Person(name) {
  this.name = name;
}

const hannah = new Person('Hannah');
console.log(hannah.name); // 输出:Hannah

当 this 的值为 undefined

当 this 的值为 undefined 或 null 时,它会被默认绑定为全局对象。但在严格模式下, this 的值将保持 undefined。

function logThis() {
  console.log(this);
}

logThis.call(null); // 输出:Window { ... } 或者 undefined

箭头函数绑定 this

箭头函数的 this 值由上层作用域来决定。箭头函数没有自己的 this 值,它们继承父级作用域中的 this 值。

const obj = {
  name: 'Hannah',
  logName() {
    const f = () => {
      console.log(this.name); // this 继承自 obj, 输出: Hannah
    };

    f();
  }
};

obj.logName();

在学习 JavaScript 的 this 关键字时,这些知识点是必备的。通过理解上下文和绑定规则,我们可以更好地使用它,并避免出现无意中绑定 this 的错误。

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

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

相关文章

  • JS 新增Cookie 取cookie值 删除cookie 举例详解

    JS 新增 Cookie 在 JavaScript 中新增 Cookie 非常简单,只需要设置 document.cookie 属性即可。 document.cookie = "key=value"; 其中,key 表示 Cookie 的键值,value 表示 Cookie 的值。如果需要设置多个 Cookie,可以使用分号(;)隔开。 …

    JavaScript 2023年6月11日
    00
  • jQuery验证插件validation使用指南

    jQuery验证插件validation使用指南 jQuery验证插件validation是一款简单易用的表单验证插件,可以有效地满足开发人员对于表单的验证需求。 安装 <!– 引入 jQuery –> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.j…

    JavaScript 2023年6月10日
    00
  • js实现前面自动补全位数的方法

    下面是详细讲解“js实现前面自动补全位数的方法”的完整攻略。 1. 简介 前置自动补全位数的方法就是指在数字前面添加相应数量的“0”,使得数字的位数达到指定的长度。在程序开发中,通常需要对数字进行前置自动补全位数操作,比如在电子表格中,在文件名中,签到表单中等等。 JavaScript提供了多种方法来完成这个任务,我们将介绍其中两种方法。 2. 方法一:利用…

    JavaScript 2023年5月28日
    00
  • js如何根据id删除数组中对象

    首先,要根据id删除数组中的对象,我们需要对该数组进行遍历,并找到该对象所在的索引位置。接下来,我们可以使用splice()函数删除该位置的对象。 具体步骤如下: 定义一个数组,包含多个对象,每个对象都有一个id属性。 let arr = [ {id: 1, name: ‘Tom’}, {id: 2, name: ‘Jerry’}, {id: 3, name…

    JavaScript 2023年6月11日
    00
  • WinForm使用正则表达式提取内容的方法示例

    WinForm使用正则表达式提取内容的方法示例 什么是正则表达式 正则表达式(Regular Expression),是一种文本模式,用来匹配、替换一些文本。 WinForm中正则表达式的使用 在WinForm中,我们可以通过使用System.Text.RegularExpressions命名空间提供的正则表达式类进行文本的匹配和替换。 使用步骤如下: 引用…

    JavaScript 2023年6月10日
    00
  • js中的this的指向问题详解

    下面给出“js中的this的指向问题详解”的完整攻略: 一、概述 在JavaScript中,this关键字总是指向调用该函数的对象。但是,在不同的情况下,this指向的对象也会有所不同。因此,理解this的指向问题对于JavaScript编程非常重要。 二、this的四种绑定方式 this的指向主要有四种绑定方式: 默认绑定:独立的函数调用,this指向全局…

    JavaScript 2023年6月10日
    00
  • JavaScript面向对象中接口实现方法详解

    JavaScript面向对象中接口实现方法详解 在JavaScript面向对象编程中,我们常常需要定义接口(interface)来规定类(class)必须实现的方法。在本篇攻略中,我们将详细讲解如何实现JavaScript中的接口。 什么是接口? 在编程中,接口是一种规范或者约束,它定义了类或者对象应该实现的方法或者属性。接口规定了类或者对象必须实现的一组方…

    JavaScript 2023年5月27日
    00
  • js实现input密码框提示信息的方法(附html5实现方法)

    请看下面的完整攻略: 前置知识 在讲解实现方法之前,需要了解以下几个基础知识: jQuery:一个JavaScript库,封装了很多常用的操作,能够简化JavaScript编程。 input:HTML5中的input元素,用于创建交互式控件,包括输入框、密码框、复选框、单选框、按钮等。 placeholder:input元素中的一个属性,用于设置输入框或密码…

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