JavaScript 中的 this 绑定规则详解

yizhihongxing

我将为您详细讲解“JavaScript 中的 this 绑定规则详解”。该攻略将包含以下几个部分:

  1. JavaScript 中的 this 指代什么
  2. this 绑定规则的类型和用法
  3. 示例说明

1. JavaScript 中的 this 指代什么

在 JavaScript 中,this 关键字的值取决于函数的调用方式。this 通常指代当前执行上下文的对象。在全局作用域中,this 指代全局对象(window)。在函数内部,this 还可以指代其他对象,比如函数的调用对象。

2. this 绑定规则的类型和用法

在 JavaScript 中,this 绑定规则包含以下四种类型:

2.1 默认绑定

当函数调用时,如果没有使用任何其他的符合下面三种规则的绑定,那么 this 将会被默认绑定到 window 对象(或全局对象)上。

function foo() {
  console.log(this); // window 对象(或全局对象)
}

foo();

2.2 隐式绑定

当函数作为对象的方法调用时,this 将会被隐式绑定到该对象上。

const obj = {
  name: "张三",
  sayName() {
    console.log(this.name);
  }
};

obj.sayName(); // "张三"

2.3 显式绑定

当使用 call、apply 或 bind 方法时,this 将会被显式绑定到指定的对象上。

function foo() {
  console.log(this.name);
}

const obj = { name: "张三" };

foo.call(obj); // "张三"

2.4 new 绑定

当使用 new 关键字调用构造函数时,this 将会被绑定到新创建的对象上。

function Person(name) {
  this.name = name;
}

const obj = new Person("张三");
console.log(obj.name); // "张三"

3. 示例说明

下面分别是两个示例说明:

示例一:隐式绑定

const person = {
  name: "张三",
  sayHi() {
    console.log(`Hi, 我是 ${this.name}`);
  },
  // 对象的方法中返回函数
  getSayHi() {
    return this.sayHi;
  }
};

const person2 = {
  name: "李四"
};

person.getSayHi().call(person2); // Hi, 我是 李四

在上面的示例中,person 对象中的 getSayHi() 方法返回了该对象的 sayHi 方法。当我们使用 call 方法,将 person2 对象作为 this 传递给 getSayHi() 方法的返回值时,this 将会指向 person2 对象。

示例二:显式绑定

function sayHi() {
  console.log(`Hi, 我是 ${this.name}`);
}

const person = {
  name: "张三"
};

const person2 = {
  name: "李四"
};

const boundSayHi = sayHi.bind(person);

boundSayHi(); // Hi, 我是 张三

boundSayHi.call(person2); // Hi, 我是 张三

在上面的示例中,使用 bind 方法将 sayHi 函数绑定到 person 对象上。然后,我们通过调用 boundSayHi() 方法,this 将会指向 person 对象。但是,当我们使用 call 方法并将 person2 对象作为 this 传递给 boundSayHi() 方法时,this 仍然指向 person 对象。这是因为,bind 方法创建的新函数无法被 call 方法覆盖。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 中的 this 绑定规则详解 - Python技术站

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

相关文章

  • javascript完美实现给定日期返回上月日期的方法

    JavaScript完美实现给定日期返回上月日期的方法 如果你需要在JavaScript中获取一个日期的上个月日期,本文将为你提供两种方法。 方法一:日期计算 我们可以使用JavaScript的Date对象的setMonth()函数通过将当前月份减一来获得上个月的日期。 function getLastMonthDate(date) { var d = ne…

    JavaScript 2023年6月10日
    00
  • Element el-tag标签图文实例详解

    Element el-tag标签图文实例详解 简介 el-tag是基于Element UI框架下的标签组件,用于展示标签或标记并进行分类,常用于项目中的文章标签或商品类别标签等。 布局样式 通过样式控制可以实现不同样式的标签展示,包括标签颜色、大小、形状等。以下是一些常用的样式: 标签颜色:el-tag默认颜色为灰色,可以通过type属性设置标签的颜色,可选…

    JavaScript 2023年6月10日
    00
  • javascript常见用法总结

    JavaScript常见用法总结 JavaScript是一种广泛用于Web开发的编程语言,具有强大的功能和灵活性。本文将为您介绍一些常见的JavaScript用法以及它们的用法和示例。 1. 声明和初始化变量 在JavaScript中,您可以使用var、let或const关键字来声明变量。其中,var和let可以初始化变量,而const只能初始化常量。下面是…

    JavaScript 2023年5月17日
    00
  • javascript学习笔记(一) 在html中使用javascript

    关于“javascript学习笔记(一) 在html中使用javascript”的完整攻略,可以分为以下几个部分: 一、为什么要在html中使用javascript 在传统的网页设计中,html主要负责网页的结构和内容,而样式和特效则需要使用css和jquery等技术实现。而javascript则是一门非常重要的网页编程语言,其功能强大,可以实现很多与用户交…

    JavaScript 2023年6月10日
    00
  • 原生js实现查找/添加/删除/指定元素的class

    实现查找指定元素的class可以使用Element.classList属性,该属性是一个只读的类数组对象,可以返回元素的所有class列表。同时,该属性还包含了一些常用的方法,可以用于添加、删除、切换、是否存在等操作。 查找指定元素的class 为了查找指定元素的class,可以使用如下代码: let element = document.getElemen…

    JavaScript 2023年6月10日
    00
  • 学习JavaScript设计模式之代理模式

    学习JavaScript设计模式之代理模式 什么是代理模式 代理模式是一种结构型设计模式,可以为其他对象提供一种代理以控制对这个对象的访问。 代理模式允许在不改变原始对象行为的情况下,通过代理对象来控制或修改对象的行为。这种方式提供了一种更加灵活和安全的访问对象的方式。 代理模式由三个部分组成,分别是目标对象(即要被代理的对象)、代理对象和客户端。 代理模式…

    JavaScript 2023年6月11日
    00
  • JavaScript数组及常见操作方法小结

    JavaScript数组及常见操作方法小结 JavaScript中的数组是一组有序的数据集合,可以存储不同类型的数据,包括数字、字符串、对象、甚至是其他数组。本文将介绍JavaScript数组常见的操作方法。 创建数组 在JavaScript中,可以通过以下两种方式来创建一个数组。 直接赋值法 直接赋值法是指在一个变量名后使用一对方括号来创建一个数组。例如:…

    JavaScript 2023年5月27日
    00
  • AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】

    让我来详细讲解一下“AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】”的完整攻略。 什么是w5cValidator? w5cValidator是一个简单易用的AngularJS表单验证框架,可以通过自定义指令来验证表单元素的合法性,并且支持内置的一些常用验证规则。 如何使用w5cValidator? 步骤一:引入w5cVali…

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