关于JavaScript中的this指向问题总结篇

yizhihongxing

详细讲解“关于JavaScript中的this指向问题总结篇”的完整攻略

一、背景及概述

JavaScript的this关键字是指向函数执行的上下文,但是在不同的情况下,this所指向的上下文可能会有所不同。前端工程师在编写JavaScript代码时,常常会遇到this指向问题,如何准确地理解和掌握this指向的问题,是我们开发高质量JavaScript代码的重要一环。本篇攻略总结了关于JavaScript中的this指向问题的常见情况,并提供了相应的示例,帮助开发者更好地理解和掌握this指向问题。

二、全局上下文中的this

在全局上下文中,this指向全局对象。

console.log(this === window); // true

三、函数上下文中的this

在函数上下文中,this可能指向多个不同的值,具体取决于函数的调用方式和函数自身的定义方式:

1.函数体内部的this

在函数内部,this的值为undefined。

function test() {
  console.log(this); // undefined
}
test();

2.作为对象方法调用的this

当函数作为对象的方法被调用时,this指向该对象。

var obj = {
  name: "John",
  sayName: function() {
    console.log(this.name);
  }
}
obj.sayName(); // "John"

3.作为构造函数调用的this

当函数被用作构造函数调用时,this指向新创建的对象。

function Person(name) {
  this.name = name;
}
var john = new Person("John");
console.log(john.name); // "John"

4.通过apply、call、bind调用的this

在使用apply、call、bind等方法调用函数时,this指向传入的第一个参数。

function test(a, b) {
  console.log(this);
  console.log(a, b);
}
var obj = {name: "John"};
test.call(obj, 1, 2); // {name: "John"}, 1, 2
test.apply(obj, [1, 2]); // {name: "John"}, 1, 2
var testFn = test.bind(obj);
testFn(1, 2); // {name: "John"}, 1, 2

5.箭头函数的this

箭头函数不会有自己的this值,箭头函数中的this是取决于它所处的上下文环境的this值。

var obj = {
  name: "John",
  sayName: () => { console.log(this.name); }
}
obj.sayName(); // undefined

注意,箭头函数中的this指向并不是由调用方式决定的,而是由函数定义的位置所决定的,箭头函数所在的作用域中的this值会被继承到箭头函数中。

四、总结

通过本篇攻略的介绍,我们可以总结出下列几条关于JavaScript中的this指向问题的规律:

  1. 在全局上下文中,this指向全局对象。

  2. 在函数体内部,this的值为undefined。

  3. 在函数作为对象的方法被调用时,this指向该对象。

  4. 在构造函数中,this指向新创建的对象。

  5. 在使用apply、call、bind等方法调用函数时,this指向传入的第一个参数。

  6. 在箭头函数中,this指向所在作用域中的this值。

以上规律的理解和掌握,有助于我们在JavaScript开发过程中更好地应对this指向问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于JavaScript中的this指向问题总结篇 - Python技术站

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

相关文章

  • axios拦截器、ElementUI组件的使用方法

    axios拦截器使用方法 1. 安装Axios Axios是一个基于Promise的HTTP库,可以在浏览器和Node.js中使用。安装Axios,请在命令行输入以下命令: npm install axios 2. 添加拦截器 可以使用Axios的拦截器来在请求或响应被处理前拦截它们。 以下是一个示例,向请求头中添加Authorization: import…

    JavaScript 2023年6月10日
    00
  • layui.js实现的表单验证功能示例

    下面是 “layui.js实现的表单验证功能示例” 的完整攻略。 一、什么是layui.js layui.js 是一款简易的前端 UI 解决方案,是由著名的前端开源组织“贤心之家”维护开发的。layui.js 主要包括丰富的UI组件和一套简单的前端模板。 在 layui.js 中,表单验证是其中之一的功能,该功能具有高度的可定制性和易用性。 二、表单验证的基…

    JavaScript 2023年6月10日
    00
  • ant-design-pro 的EditableProTable表格验证调用的实现代码

    Ant Design Pro 的 EditableProTable 组件提供了表格验证的功能,其实现的关键在于将验证规则通过装饰器传递给 EditableTable 组件。下面是具体实现步骤: 安装依赖 在项目中增加对 rc-form 和 formik 包的依赖。 npm i rc-form formik 创建验证规则 可通过使用 formik 包中提供的 …

    JavaScript 2023年6月10日
    00
  • JS正则表达式修饰符中multiline(/m)用法分析

    JS正则表达式修饰符中multiline(/m)用法是指让正则表达式中的锚点(^和$)可以匹配字符串的多行文本,而不是只匹配整个字符串的开头和结尾。下面是该修饰符的用法分析: multiline(/m)用法分析 多行模式(/m)是JS正则表达式中的一个修饰符,它可以让正则表达式中的锚点(^和$)匹配多行文本。 多行模式(/m)示例 举个例子,假设有以下字符串…

    JavaScript 2023年5月28日
    00
  • 全面解析Bootstrap布局组件应用

    全面解析Bootstrap布局组件应用 Bootstrap是一个开源的前端框架,提供了一套简洁、直观、强悍的组件库。Bootstrap的布局组件是值得一提的,在本文中我们将会全面解析Bootstrap布局组件的应用。 响应式设计 Bootstrap的布局组件强调响应式设计。一个页面不仅仅需要美观,还需要根据不同屏幕尺寸的设备来展现不同的布局效果。Bootst…

    JavaScript 2023年6月11日
    00
  • Vue结合Video.js播放m3u8视频流的方法示例

    这里是Vue结合Video.js播放m3u8视频流的完整攻略: 一、安装Video.js 使用npm安装Video.js: npm install video.js –save 二、引入Video.js和CSS文件 在Vue的App.vue中引入Video.js和CSS文件: <template> <div> <video i…

    JavaScript 2023年6月11日
    00
  • 整理JavaScript对DOM中各种类型的元素的常用操作

    整理JavaScript对DOM中各种类型的元素的常用操作攻略 DOM是文档对象模型(Document Object Model)的缩写,JavaScript通过DOM对HTML页面中的各种元素进行操作,从而实现动态网页效果。在DOM中,各种类型的元素均可以通过JavaScript进行操作。下面,我们将详细讲解如何使用JavaScript对DOM中各种类型的…

    JavaScript 2023年6月10日
    00
  • 详细分析jsonp的原理和实现方式

    详细分析JSONP的原理和实现方式 JSONP概述 JSONP(JSON with Padding)是一种JSON数据格式的应用方式。由于同源策略的限制,XMLHttpRequest只允许请求与页面在同一域下的资源,而使用JSONP技术可以实现跨域访问。JSONP通过动态插入script标签,从而实现跨域请求。JSONP的工作原理是:在页面中创建一个 scr…

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