作家
登录

JavaScript中this的运行机制及爬坑指南

作者: 来源: 2018-03-16 08:43:31 阅读 我要评论

有奖调研 | 人脸辨认功能在互联网行业认知度情况


JavaScript中 this的运行机制及爬坑指南

在 JavaScript 中,this 这个特别的变量是比拟较较复杂的,因为 this 不仅仅用在面向对象情况中,在其他任何处所也是可用的。 本篇博文中会解释 this 是若何工作的以及应用中可能导致问题的处所,最后奉上最佳实践。

为了更好地舆解 this,将 this 应用的场景分成三类:

  • 在函数内部 this 一个额外的,平日是隐含的参数。
  • 在函数外部(顶级感化域中): 这指的是浏览器中的全局对象或者 Node.js 一一个模块的输出。
  • 在传递给eval()的字符串中: eval() 或者获取 this 当前值值,或者将其设置为全局对象,取决于 this 是直接调用照样借居调用。

我们来看看每个类别。

this 在函数中

这是最常用的 this 应用方法,函数经由过程扮演三种不合的角色来表示 JavaScript 中的所有可调用构造体:

  • 通俗函数(this 在非严格模式下为全局对象,在严格模式下为undefined)
  • 构造函数(this 指向新创建的实例)
  • 办法(this 是指办法调用的接收者)

在函数中,this 平日被认为是一个额外的,隐含的参数。

this 在通俗函数中

在通俗函数中,this 的值取决于模式:

非严格模式: this 是指向全局对象 (在浏览器中为window对象)。

  1. function sloppyFunc() {  
  2.     console.log(this === window); // true  
  3.  
  4. sloppyFunc(); 

严格模式: this 的值为 undefined。

我不爱好应用this作为通俗函数的附加参数的API:

  1. function strictFunc() {  
  2.     'use strict' 
  3.     console.log(this === undefined); // true  
  4.  
  5. strictFunc(); 

也就是说,this 是一个设定了默认值(window或undefined)的隐式参数。 然则,可以经由过程 call() 或 apply() 进行函数调用,并明白指定this的值:

  1. function func(arg1, arg2) {  
  2.     console.log(this); // a  
  3.     console.log(arg1); // b  
  4.     console.log(arg2); // c  
  5.  
  6. func.call('a''b''c'); // (this, arg1, arg2)  
  7. func.apply('a', ['b''c']); // (this, arrayWithArgs) 

this 在构造函数中

如不雅经由过程new运算符调用函数,则函数将成为构造函数。 该运算符创建一个新的对象,并经由过程this传递给构造函数:

  1. var savedThis;  
  2. function Constr() { 
  3.     savedThis = this;  
  4.  
  5. var inst = new Constr();  
  6. console.log(savedThis === inst); // true  
  7. 在JavaScript中实现,new运算符大年夜致如下所示(更精确的实现稍微复杂一点): 
     1/6    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      重磅消息:微软 Service Fabric 正式开源

    有奖调研 | 人脸辨认功能在互联网行业认知度情况经由过程应用法度榜样级其余感知和洞察,为微办事带来编排和主动化的优势 微软的 Azure Service Fabric 的官方博客在2017.3.2>>>详细阅读


    本文标题:JavaScript中this的运行机制及爬坑指南

    地址:http://www.17bianji.com/lsqh/40750.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)