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

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日

相关文章

  • 详解javascript获取url信息的常见方法

    下面我会详细讲解“详解javascript获取url信息的常见方法”的完整攻略。 获取url信息 在javascript中,获取url信息可以通过window.location对象来实现。window.location提供了一系列属性,能够帮助我们轻松获取当前网页的各种信息。 获取url 获取当前页面url的方法是直接访问window.location属性,…

    JavaScript 2023年6月11日
    00
  • JS中彻底删除JSON对象组成的数组中的元素

    删除JSON对象组成的数组中的元素可以使用数组的splice方法,该方法可以删除数组中指定位置的元素,并且会修改原数组。以下是彻底删除JSON对象组成的数组中的元素的步骤: 找到要删除的JSON对象在数组中的位置 可以使用数组的indexOf方法来找到要删除的JSON对象在数组中的位置,例如: “`javascriptvar arr = [ {name: …

    JavaScript 2023年5月27日
    00
  • JavaScript处理XML DOM、XPath和XSLT方法详解

    JavaScript处理XML DOM、XPath和XSLT方法详解 什么是XML DOM? XML DOM(XML Document Object Model)是将XML文档表示成树形结构的方式,让开发者可以使用JavaScript来访问和操作XML文档中的节点和元素。在XML DOM中,每个节点都是一个对象,开发者可以通过对象的属性和方法来读取或修改节点…

    JavaScript 2023年6月10日
    00
  • JavaScript-定时器0~9抽奖系统详解(代码)

    JavaScript定时器0~9抽奖系统是一种利用定时器生成随机数来模拟抽奖的方法。本文将详细讲解该方法的代码实现和使用过程。 代码实现说明 HTML结构 首先,我们需要在HTML中写入一个包含数字0~9的列表。每个数字都应该有一个特定的ID,以便在JavaScript中调用。 CSS样式 在CSS中,我们可以为数字设置样式,以便它们在抽奖过程中呈现不同的状…

    JavaScript 2023年6月11日
    00
  • vue3项目中使用tinymce的方法

    下面是vue3项目中使用tinymce编辑器的完整攻略: 安装tinymce 首先,在终端中通过npm包管理器安装tinymce: npm install tinymce –save 引入tinymce 在需要使用的组件中引入tinymce的js文件: <template> <div> <textarea id="e…

    JavaScript 2023年6月11日
    00
  • JS控件的生命周期介绍

    下面我就为你详细讲解一下JS控件的生命周期介绍的完整攻略。 什么是JS控件的生命周期 JS控件的生命周期是指JS控件从实例化到销毁的整个过程,它包括了多个不同的阶段,这些阶段会在特定的时间点被执行,以保证JS控件的正常运行和适应不同的环境。 通常,JS控件的生命周期包括以下阶段: 1.实例化阶段 在这个阶段,JS控件会被实例化,并对其属性进行初始化和赋值。通…

    JavaScript 2023年6月10日
    00
  • JavaScript中exec函数用法实例分析

    JavaScript中exec函数用法实例分析 介绍 exec 方法是 JavaScript 正则表达式对象的一个方法,用于在字符串中查找指定的正则表达式,并返回匹配结果。 该方法返回一个数组,数组的第一个元素是匹配到的字符串,后面的元素则是与正则表达式的每个括号匹配的子字符的数组。如果没有匹配到,则返回 null。 在本篇文章中,我们将通过两个例子来一步步…

    JavaScript 2023年6月10日
    00
  • JavaScript 数组方法filter与reduce

    JavaScript 数组方法filter与reduce 在JavaScript中,数组是一个重要的数据类型,因此数组的处理成为我们开发中必不可少的一部分。JavaScript提供了一些内置方法来操作数组中的元素,其中最基础且最常用的是forEach, map, filter和reduce。本文将详细探讨filter和reduce两种方法。 filter方法…

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