javascript中this的四种用法

当我们使用JavaScript进行编程时,经常会使用到this关键字。this的含义在不同的情况下有不同的用法。下面将详细讲解Javascript中this的四种用法。

1. 默认绑定

默认绑定是指当我们调用一个函数时,如果该函数中使用了this,而且该函数没有使用任何上下文绑定的方法,那么this的值就是全局对象(在浏览器中就是window对象)。

以下是一个示例代码:

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

var name = "globalName";
var obj1 = {
  name: "object1Name",
  sayHi: sayHi
}

var obj2 = {
  name: "object2Name"
}

sayHi(); // "globalName"
obj1.sayHi(); // "object1Name"
obj1.sayHi.call(obj2); // "object2Name"

在上面的sayHi函数中,没有使用任何上下文绑定的方法,因此在执行函数时,this的值就是默认绑定的值,即全局对象(window)。在调用obj1.sayHi()时,this的值就是obj1,因为函数被一个对象所调用,对象就是上下文,函数的执行上下文被绑定到了该对象上。在调用obj1.sayHi.call(obj2)时,虽然调用了obj1中的sayHi方法,但是使用了call方法将上下文绑定到了obj2上,因此this的值就是obj2

2. 隐式绑定

隐式绑定是指当一个函数被一个对象所调用时,函数中的this关键字将被绑定到该对象。下面是一个示例代码:

var person = {
  name: "Tom",
  sayHi: function() {
    console.log("Hi, my name is " + this.name);
  }
}
person.sayHi(); // "Hi, my name is Tom"

在上面的代码中,调用person.sayHi()时,this的值被绑定到了person对象,因为sayHi函数是由person对象来调用的。

3. 显示绑定

显示绑定是指我们使用callapply或者bind方法来明确指定this关键字的值。下面是一个示例代码:

function sayHi() {
  console.log("Hi, my name is " + this.name);
}

var person1 = {
  name: "Tom",
}

var person2 = {
  name: "Jerry",
}

sayHi.call(person1); // "Hi, my name is Tom"
sayHi.apply(person2); // "Hi, my name is Jerry"
sayHi.bind(person1)(); // "Hi, my name is Tom"

在上面的代码中,我们使用了callapplybind方法将sayHi函数的上下文绑定到person1person2对象上。使用callapply方法,可以直接传递参数给函数,而使用bind方法则需要在后面加()来进行调用。

4. new绑定

当我们使用new关键字来创建一个对象的实例时,this关键字会被绑定到新创建的对象实例上。以下是一个示例代码:

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHi = function() {
    console.log("Hi, my name is " + this.name + ", I'm " + this.age + " years old.");
  }
}

var person1 = new Person("Tom", 18);
var person2 = new Person("Jerry", 20);

person1.sayHi(); // "Hi, my name is Tom, I'm 18 years old."
person2.sayHi(); // "Hi, my name is Jerry, I'm 20 years old."

在代码中,我们使用new关键字来创建了两个Person对象的实例,this关键字被绑定到了这两个新创建的对象实例上。因此,在调用sayHi方法时,this的值就是这两个对象实例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript中this的四种用法 - Python技术站

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

相关文章

  • JS Array.slice 截取数组的实现方法

    JS Array.slice截取数组常用于从数组中获取一部分数组元素。以下是完整的攻略,包括:定义、参数、返回值、示例说明、应用场景等。 定义 Array.slice是数组的一个方法,用于截取数组的一部分,返回截取后的新数组,而不会修改原数组。 语法 array.slice(start, end) 参数 start:要截取的开始下标,从0开始。 end:要截…

    JavaScript 2023年5月27日
    00
  • JavaScript 如何在线解压 ZIP 文件

    若要在JavaScript中在线解压一个ZIP文件,可以使用一个名为jszip的JavaScript库。jszip可以通过NPM或通过CDN链接进行安装。 步骤 1:引入jszip库 安装jszip后,需要将其引入到你的项目中,可以通过如下方式: <script src="https://cdn.jsdelivr.net/npm/jszip/…

    JavaScript 2023年5月27日
    00
  • 详解javascript立即执行函数表达式IIFE

    标题:详解JavaScript立即执行函数表达式(IIFE) JavaScript中的立即执行函数表达式(IIFE)可以防止变量污染和全局作用域污染。在本文中,我们将介绍IIFE的原理、用途和示例。 1. IIFE的原理 IIFE是一种JavaScript语言的常见模式,通过使用函数作用域来创建私有作用域,避免了变量和函数名在全局作用域中被污染,从而更好地进…

    JavaScript 2023年5月27日
    00
  • ES6入门教程之let、const的使用方法

    ES6入门教程之let、const的使用方法 let和const的概念 ES6之前,我们只能用 var 关键字来定义变量。在 ES6 中,我们可以使用 let 和 const 来定义变量和常量。 一般情况下,我们使用 let 来定义变量。const 则主要用于定义常量,一旦定义后就不能被重新赋值了。 let的使用方法 使用 let 关键字定义变量,可以避免很…

    JavaScript 2023年6月11日
    00
  • 如何在JavaScript中使用localStorage详情

    当我们在客户端开发中需要在用户的设备上存储一些数据时,可以使用localStorage。localStorage是HTML5的一个新特性,它允许你在客户端存储名称/值对,并且还支持在不同的浏览器标签之间共享数据。下面是在JavaScript中使用localStorage的详细攻略: 一、localStorage的基本使用 首先在JavaScript中使用lo…

    JavaScript 2023年6月11日
    00
  • JS实现汉字与Unicode码相互转换的方法详解

    JS实现汉字与Unicode码相互转换的方法详解 在JavaScript中,可以使用charCodeAt()方法将汉字转换为Unicode编码,也可以使用fromCharCode()方法将Unicode编码转换为汉字。下面详细介绍这两个方法的使用方法。 将汉字转换为Unicode编码 function stringToUnicode(str) { var u…

    JavaScript 2023年5月19日
    00
  • 如何编写高质量 JavaScript 代码

    如何编写高质量 JavaScript 代码 JavaScript 是一种灵活、功能强大的编程语言,但有时编写高质量的代码并不容易。下面是几个技巧和指南,可以帮助你编写更好的 JavaScript 代码。 代码结构 良好的代码结构是保持代码可读性和易于维护的关键。以下是一些实施和保持良好代码结构的方式: 使用简洁的、有意义的变量名和函数名,以及明确和一致的格式…

    JavaScript 2023年5月27日
    00
  • 什么是JavaScript

    JavaScript是一种脚本语言,是用于Web开发的一种编程语言,在网页中主要负责实现交互效果和动态效果,如:表单校验、动画效果、音频视频控制、数据可视化等功能。 JavaScript最初由Netscape公司开发,在1995年被首次引入网页中,从此开始成为解决客户端Web开发的主要语言之一。现在,JavaScript已经发展成为一种非常强大、灵活、广泛应…

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