JavaScript基础之this和箭头函数详析

yizhihongxing

JavaScript基础之this和箭头函数详析

本文主要介绍JavaScript中的this关键字和箭头函数的使用方法和注意事项。

什么是this

在JavaScript中,this关键字代表当前执行上下文的对象。它的值是在函数执行时确定的,具体取决于函数的调用方式。

全局作用域下的this

在全局作用域下,this指向的是全局对象window。

console.log(this);  // Window对象

函数作用域下的this

在函数作用域下,this指向的是调用该函数的对象。

直接调用函数

如果函数被直接调用,则this指向的是全局对象window。

function test() {
  console.log(this);  // Window对象
}

test();

对象方法调用

如果函数作为对象的方法被调用,则this指向的是该对象。

let obj = {
  name: '张三',
  sayName: function() {
    console.log(this.name);  // '张三'
    console.log(this);       // obj对象
  }
}

obj.sayName();

构造函数调用

如果函数作为构造函数调用,则this指向的是新创建的对象。

function Person(name) {
  this.name = name;
  console.log(this);     // Person {name: '张三'}
}

let p = new Person('张三');

显示绑定this

除了默认绑定,this还可以通过显示绑定的方式来指定它的值。Javascript中提供了apply、call和bind三个方法来实现显示绑定。

apply方法

apply方法用于改变函数中的this指向,并将传入的参数以数组的形式传递给函数。

let obj1 = {
  name: '张三'
}

let obj2 = {
  name: '李四'
}

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

sayName.apply(obj1);  // '张三'
sayName.apply(obj2);  // '李四'

call方法

call方法与apply类似,不同的是它接收的参数是一个一个单独传递的,而不是数组形式。

let obj1 = {
  name: '张三'
}

let obj2 = {
  name: '李四'
}

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

sayName.call(obj1);  // '张三'
sayName.call(obj2);  // '李四'

bind方法

bind方法返回一个新的函数,它的this关键字会被永久性的绑定到传入的对象上。

let obj1 = {
  name: '张三'
}

let obj2 = {
  name: '李四'
}

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

let sayName1 = sayName.bind(obj1);
let sayName2 = sayName.bind(obj2);

sayName1();  // '张三'
sayName2();  // '李四'

箭头函数

箭头函数是ES6中新增的一种函数声明方式。它除了语法上的差异,还具有一些特殊的行为。

箭头函数的语法

箭头函数的语法结构为:

(param1, param2, ..., paramN) => { statements }

其中,params是函数需要的参数,用逗号分隔,statements是函数体,可以包含多条语句。

箭头函数的特性

箭头函数有以下几个特性:

1. 箭头函数没有自己的this

在箭头函数中,this关键字指向的是定义时所在的对象,而不是执行时所在的对象。

let obj = {
  name: '张三',
  sayName: () => {
    console.log(this.name);    // undefined
    console.log(obj.name);     // '张三'
  }
}

obj.sayName();

2. 箭头函数不能使用arguments对象

在箭头函数中,arguments关键字会指向包含箭头函数体的函数的arguments对象,而不是箭头函数本身的arguments对象。

let test = () => {
  console.log(arguments);    // 报错
}

test(1, 2, 3);

3. 箭头函数不能作为构造函数

箭头函数没有自己的this关键字,因此不能被用作构造函数。

let Person = (name) => {
  this.name = name;    // 报错
}

let p = new Person('张三');

箭头函数的示例

示例1:箭头函数与setTimeout的使用

在setTimeout中,this指向的是全局对象window,使用箭头函数可以避免this指向的问题。

let obj = {
  name: '张三',
  sayName: function() {
    setTimeout(() => {
      console.log(this.name);    // '张三'
    }, 1000)
  }
}

obj.sayName();

示例2:箭头函数与map方法的使用

在使用map方法时,可以使用箭头函数简化代码。

let arr = [1, 2, 3, 4, 5];

let newArr = arr.map(x => x * 2);

console.log(newArr);    // [2, 4, 6, 8, 10]

总结

本文介绍了JavaScript中this关键字的使用方法和箭头函数的特性和用法,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript基础之this和箭头函数详析 - Python技术站

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

相关文章

  • 详解addEventListener的三个参数之useCapture

    addEventListener是DOM元素对象常用的事件绑定方法,其常用的用法如下: element.addEventListener(event, function [, options]); 其中,第三个参数options可以是一个布尔值,也可以是一个对象。当其是一个布尔值时,表示useCapture,即事件是否在捕获阶段(capturing phas…

    JavaScript 2023年6月11日
    00
  • ES6模板字符串和标签模板的应用实例分析

    下面是关于 “ES6模板字符串和标签模板的应用实例分析” 的完整攻略。 ES6模板字符串 ES6模板字符串是一种新的字符串类型,用反引号 (`) 包裹字符串,可以使用 ${} 语法插入变量和表达式。它们也可以跨越多行而不需要添加额外的转义字符。 下面是一个示例,使用ES6模板字符串构建HTML模板: const name = ‘John’; const ag…

    JavaScript 2023年5月28日
    00
  • 详解如何将 Vue-cli 改造成支持多页面的 history 模式

    下面是如何将 Vue-cli 改造成支持多页面的 history 模式的攻略。具体步骤如下: 一、创建多页面应用 首先需要在 Vue-cli 中创建多页面应用。在 src 目录下新建多个 .html 文件,比如 index.html、about.html 等。在 src 目录下还需要新建多个 .js 文件,比如 index.js、about.js 等,这些 …

    JavaScript 2023年6月11日
    00
  • Javascript闭包的作用与使用方法浅析

    Javascript闭包的作用与使用方法浅析 什么是Javascript闭包? Javascript闭包是指函数在定义时,它内部的变量、函数和作用域会被一同记住,并在函数执行完毕后依然能够访问和使用这些变量、函数和作用域,即使函数所在的外部作用域已经被销毁,也能访问这些数据。 举个例子,下面的代码展示了一个闭包的简单例子: function outer() …

    JavaScript 2023年6月10日
    00
  • js创建表单元素并使用submit进行提交

    下面是创建表单元素并使用submit进行提交的完整攻略,由以下三个步骤组成: 步骤一:创建表单元素 创建表单元素需要使用JavaScript。我们可以使用DOM API来创建表单元素。首先,我们需要创建一个 元素。可以使用document.createElement()方法来创建。 const form = document.createElement(‘f…

    JavaScript 2023年6月10日
    00
  • 一起来看看js对象和事件的学习笔记

    一起来看看js对象和事件的学习笔记 前言 本文将介绍JavaScript中对象和事件相关知识,并提供一些示例,帮助读者更好的理解和掌握这些知识。 什么是对象 在JavaScript中,对象指的是一组属性和方法的集合。它可以通过字面量或构造函数来创建。 下面是一个使用字面量创建对象的示例: const person = { name: ‘张三’, age: 1…

    JavaScript 2023年6月10日
    00
  • javascript算法之数组反转

    我将为你详细讲解“javascript算法之数组反转”的完整攻略。首先需要了解的是什么是数组反转。数组反转是指将一个数组中的元素顺序颠倒,即数组的第一个元素变为最后一个,第二个元素变为倒数第二个,以此类推。 接下来我将为你提供具体的步骤: 创建一个数组 在开始反转数组之前,我们需要先创建一个数组。可以使用以下方法创建一个数组变量: let arr = [1,…

    JavaScript 2023年5月27日
    00
  • JS获取当前时间的实例代码(昨天、今天、明天)

    获取当前时间是JavaScript中比较基础的内容,可以通过Date对象的方法获取到当前的时间、日期等信息。对于“昨天、今天、明天”的需求,可以在获取当前时间的基础上,通过一些计算方法实现。 以下是获取当前时间及计算“昨天、今天、明天”的示例代码: 获取当前时间的实例代码 const now = new Date(); // 创建一个Date对象,获取当前时…

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