iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Javascript中的this有什么作用
  • 837
分享到

Javascript中的this有什么作用

2024-04-02 19:04:59 837人浏览 泡泡鱼
摘要

这篇文章主要介绍“javascript中的this有什么作用”,在日常操作中,相信很多人在Javascript中的this有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解

这篇文章主要介绍“javascript中的this有什么作用”,在日常操作中,相信很多人在Javascript中的this有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Javascript中的this有什么作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

从call方法开始

call 方法允许切换函数执行的上下文环境(context),即 this 绑定的对象。

大多数介绍 this 的文章中都会把 call 方法放到***介绍,但此文我们要把 call 方法放在***位介绍,并从 call 方法切入来研究 this  ,因为 call 函数是显式绑定 this 的指向,我们来看看它如何模拟实现(不考虑传入 null 、 undefined 和原始值):

Function.prototype.call = function(thisArg) {     var context = thisArg;     var arr = [];     var result;      context.fn = this;      for (let i = 1, len = arguments.length; i < len; i++) {         arr.push('arguments[' + i + ']');     }      result = eval("context.fn(" + arr + ")");      delete context.fn;      return result; }

从以上代码我们可以看到,把调用 call 方法的函数作为***个参数对象的方法,此时相当于把***个参数对象作为函数执行的上下文环境,而 this  是指向函数执行的上下文环境的,因此 this 就指向了***个参数对象,实现了 call 方法切换函数执行上下文环境的功能。

对象方法中的this

在模拟 call 方法的时候,我们使用了对象方法来改变 this 的指向。调用对象中的方法时,会把对象作为方法的上下文环境来调用。

既然 this 是指向执行函数的上下文环境的,那我们先来研究一下调用函数时的执行上下文情况。

下面我门来看看调用对象方法时执行上下文是如何的:

var foo = {     x : 1,     getX: function(){         console.log(this.x);     } } foo.getX();

Javascript中的this有什么作用

从上图中,我们可以看出getX方法的调用者的上下文是foo,因此getX方法中的 this 指向调用者上下文foo,转换成 call  方法为foo.getX.call(foo)。

下面我们把其他函数的调用方式都按调用对象方法的思路来转换。

构造函数中的this

function Foo(){     this.x = 1;     this.getX = function(){         console.log(this.x);     } } var foo = new Foo(); foo.getX();

执行 new  如果不考虑原型链,只考虑上下文的切换,就相当于先创建一个空的对象,然后把这个空的对象作为构造函数的上下文,再去执行构造函数,***返回这个对象。

var newMethod = function(func){     var context = {};     func.call(context);     return context; } function Foo(){     this.x = 1;     this.getX = function(){         console.log(this.x);     } } var foo = newMethod(Foo); foo.getX();

Javascript中的this有什么作用

DOM事件处理函数中的this

DOMElement.addEventListener('click', function(){    console.log(this);  });

把函数绑定到DOM事件时,可以当作在DOM上增加一个函数方法,当触发这个事件时调用DOM上对应的事件方法。

DOMElement.clickHandle = function(){     console.log(this); } DOMElement.clickHandle();

Javascript中的this有什么作用

普通函数中的this

var x = 1; function getX(){     console.log(this.x); } getX();

这种情况下,我们创建一个虚拟上下文对象,然后普通函数作为这个虚拟上下文对象的方法调用,此时普通函数中的this就指向了这个虚拟上下文。

那这个虚拟上下文是什么呢?在非严格模式下是全局上下文,浏览器里是 window ,nodejs里是 Global ;在严格模式下是 undefined  。

var x = 1; function getX(){     console.log(this.x); }  [viturl context].getX = getX; [viturl context].getX();

Javascript中的this有什么作用

闭包中的this

var x = 1; var foo = {     x: 2,     y: 3,     getXY: function(){         (function(){             console.log("x:" + this.x);             console.log("y:" + this.y);          })();     } } foo.getXY();

这段代码的上下文如下图:

Javascript中的this有什么作用

这里需要注意的是,我们再研究函数中的 this 指向时,只需要关注 this 所在的函数是如何调用的, this  所在函数外的函数调用都是浮云,是不需要关注的。因此在所有的图示中,我们只需要关注红色框中的内容。

因此这段代码我们关注的部分只有:

(function(){     console.log(this.x); })();

与普通函数调用一样,创建一个虚拟上下文对象,然后普通函数作为这个虚拟上下文对象的方法立即调用,匿名函数中的 this 也就指向了这个虚拟上下文。

Javascript中的this有什么作用

参数中的this

var x = 1; var foo = {     x: 2,     getX: function(){         console.log(this.x);     } } setTimeout(foo.getX, 1000);

函数参数是值传递的,因此上面代码等同于以下代码:

var getX = function(){     console.log(this.x); }; setTimeout(getX, 1000);

然后我们又回到了普通函数调用的问题。

全局中的this

全局中的 this 指向全局的上下文

var x = 1; console.log(this.x);

Javascript中的this有什么作用

复杂情况下的this

var x = 1; var a = {     x: 2,     b: function(){         return function(){             return function foo(){                 console.log(this.x);             }                 }     } };  (function(){     var x = 3;     a.b()()(); })();

看到上面的情况是有很多个函数,但我们只需要关注 this 所在函数的调用方式,首先我们来简化一下如下:

var x = 1; (function(){     var x = 3;     var foo = function(){         console.log(this.x);     }     foo(); });

this 所在的函数 foo 是个普通函数,我们创建一个虚拟上下文对象,然后普通函数作为这个虚拟上下文对象的方法立即调用。因此这个  this指向了这个虚拟上下文。在非严格模式下是全局上下文,浏览器里是 window ,nodejs里是 Global ;在严格模式下是 undefined  。

总结

在需要判断 this 的指向时,我们可以安装这种思路来理解:

  • 判断 this 在全局中OR函数中,若在全局中则 this 指向全局,若在函数中则只关注这个函数并继续判断。

  • 判断 this 所在函数是否作为对象方法调用,若是则 this 指向这个对象,否则继续操作。

  • 创建一个虚拟上下文,并把this所在函数作为这个虚拟上下文的方法,此时 this 指向这个虚拟上下文。

  • 在非严格模式下虚拟上下文是全局上下文,浏览器里是 window ,node.js里是 Global ;在严格模式下是 undefined 。

图示如下:

Javascript中的this有什么作用

到此,关于“Javascript中的this有什么作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Javascript中的this有什么作用

本文链接: https://www.lsjlt.com/news/66338.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Javascript中的this有什么作用
    这篇文章主要介绍“Javascript中的this有什么作用”,在日常操作中,相信很多人在Javascript中的this有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • JavaScript中的this指针有什么作用
    本篇内容主要讲解“JavaScript中的this指针有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的this指针有什么作用”吧...
    99+
    2022-10-19
  • Javascript的this有什么用
    小编给大家分享一下Javascript的this有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在理解javascript...
    99+
    2022-10-19
  • JavaScript中this指向有什么用
    这篇文章给大家分享的是有关JavaScript中this指向有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript 中的 this 指向问题有很多文章在解释,...
    99+
    2022-10-19
  • JavaScript中this关键字有什么用
    本篇内容主要讲解“JavaScript中this关键字有什么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中this关键字有什么用”吧!与...
    99+
    2022-10-19
  • javascript中什么是this
    这篇文章主要介绍“javascript中什么是this”,在日常操作中,相信很多人在javascript中什么是this问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java...
    99+
    2022-10-19
  • javascript中this指的是什么
    这篇文章主要介绍javascript中this指的是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! this的中文意思为“当前;这个”,是javasc...
    99+
    2022-10-19
  • javascript中的this指向什么
    这篇文章主要介绍“javascript中的this指向什么”,在日常操作中,相信很多人在javascript中的this指向什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • java中this的作用是什么
    这期内容当中小编将会给大家带来有关java中this的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了...
    99+
    2023-06-14
  • js中this有什么用
    这篇文章主要介绍了js中this有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其...
    99+
    2023-06-14
  • JavaScript中this的原理是什么
    本篇文章为大家展示了JavaScript中this的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一、this原理this是JavaScrip...
    99+
    2022-10-19
  • JavaScript中的this工作原理
    这篇文章主要介绍“JavaScript中的this工作原理”,在日常操作中,相信很多人在JavaScript中的this工作原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • javascript中有哪些this用法
    本篇内容介绍了“javascript中有哪些this用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!javascript中this用法:1...
    99+
    2023-06-14
  • javascript中有什么作用
    这篇文章主要介绍了javascript中有什么作用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。主要作用:1、嵌入动态文本于HTML页面;2、读写HTML元素;3、对浏览器事...
    99+
    2023-06-15
  • JavaScript中this怎么用
    这篇文章主要介绍JavaScript中this怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!this是面向对象语言中一个重要的关键字,理解并掌握该关键字的使用对于我们代码的健壮...
    99+
    2022-10-19
  • C++中的this指针有什么用
    这篇文章主要介绍“C++中的this指针有什么用”,在日常操作中,相信很多人在C++中的this指针有什么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中的this指针有什么用”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • vue中的this指向有什么用
    小编给大家分享一下vue中的this指向有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue 中的this 指向?以上是...
    99+
    2022-10-19
  • JavaScript中的iterable有什么作用
    这篇文章主要介绍“JavaScript中的iterable有什么作用”,在日常操作中,相信很多人在JavaScript中的iterable有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2022-10-19
  • javascript中的类有什么作用
    本篇内容介绍了“javascript中的类有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 怎么使用JavaScript中的this
    本篇内容介绍了“怎么使用JavaScript中的this”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!隐式...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作