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使用Math.random()生成简单的验证码

    生成验证码是网站开发中常见的需求之一,通过JavaScript的Math.random()方法可以生成随机数,进而生成简单的验证码。下面是一个完整的攻略,会详细讲解生成验证码的步骤以及两条示例说明。 生成验证码的步骤 1. 定义生成验证码的函数 在JavaScript中,可以通过函数来生成验证码。我们可以定义一个名为generateCode的函数,该函数可返…

    JavaScript 2023年5月28日
    00
  • javascript工厂方式定义对象

    下面我将详细讲解一下“javascript工厂方式定义对象”的完整攻略。 什么是工厂模式 在 JavaScript 中,工厂模式是一种用于创建对象的设计模式。这种模式可以用来解决创建对象时代码冗余的问题,同时也有利于避免不必要的重复工作,从而使代码更加简洁、优雅。 工厂模式的基本实现方式 下面,我们来看一下工厂模式的基本实现方式: function fact…

    JavaScript 2023年6月10日
    00
  • 果断收藏9个Javascript代码高亮脚本

    收藏Javascript代码高亮脚本的完整攻略 1. 搜索Github Github上有很多Javascript代码高亮插件,可以通过搜索Github来找到适合自己项目的插件。在Github的搜索框中输入”javascript highlight”,即可得到相关插件。 示例:Search Github Code Highlight 1. 打开Github网站…

    JavaScript 2023年6月11日
    00
  • javascript格式化json显示实例分析

    接下来我将为你详细讲解“JavaScript格式化JSON显示实例分析”的完整攻略。 什么是JSON JSON是JavaScript Object Notation的缩写,是一种轻量级的数据交换格式。JSON使用文本来描述数据对象,与XML不同,JSON更容易阅读、编写、解析,因为它的语法格式比XML更简洁。 格式化JSON 在处理JSON格式的数据时,我们…

    JavaScript 2023年5月27日
    00
  • 清除网页历史记录,屏蔽后退按钮!

    清除网页历史记录和屏蔽后退按钮可以通过一些技巧实现,下面我将为大家详细讲解这个过程。 清除网页历史记录 清除网页历史记录是为了保护隐私,避免别人查看我们的浏览历史。以下是步骤: 打开浏览器,找到浏览器菜单(通常在右上角)。 点击浏览器菜单,在下拉菜单中找到“设置”或“选项”等相关选项。 进入设置页面后,在“隐私与安全”或“清除浏览数据”等选项中找到“清除浏览…

    JavaScript 2023年6月11日
    00
  • JavaScript基础教程——入门必看篇

    JavaScript基础教程——入门必看篇 第一部分:JavaScript简介 JavaScript是一种广泛使用的脚本语言,它可以让网页具有交互性和动态性。本篇入门教程主要介绍JavaScript的基础知识,帮助初学者快速入门。 第二部分:变量、运算符和语句 在JavaScript中,变量、运算符和语句是非常基础且重要的概念。变量通过声明来定义,运算符可以…

    JavaScript 2023年5月17日
    00
  • JS之Date对象和获取系统当前时间详解

    当我们开发网站时,经常需要操作时间。JavaScript中提供了Date对象,可以方便地进行时间相关的操作。 Date对象 Date对象可以获取当前时间,也可以设置指定时间,提供了很多方法操作时间。 获取当前时间 获取当前时间可以使用Date对象的构造函数不传递任何参数,也可以使用now方法。 // 使用构造函数获取当前时间 let now1 = new D…

    JavaScript 2023年5月27日
    00
  • 详解ionic本地相册、拍照、裁剪、上传(单图完全版)

    详解Ionic本地相册、拍照、裁剪、上传(单图完全版) 本文将详细介绍如何在Ionic项目中实现本地相册、拍照、裁剪、上传的功能,主要介绍以下步骤: 安装插件 导入插件 修改config.xml文件 实现功能的代码 编译打包 安装插件 我们需要安装以下插件: cordova plugin add cordova-plugin-camera cordova p…

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