JavaScript 关键字this

javascript学习——this关键字 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。前一章已经提到,this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。简单说,this就是属性或方法“当前”所在的对象。上面代码中,this就代表property属性当前所在的对象。下面是一个实际的例子。上面代码中,this.name表示name属性所在的那个对象。由于this.name是在describe。 阅读详情

前言

When we learn a new technology,we need to know what it is,why we learn it and how to use it best

​ JavaScript的this,对于初学者来说,是一个非常头疼的问题,老是搞不清this的运行机制。但是this在JavaScript中的运用是非常广泛的,如果想要成为一个JavaScript的高手,那么就必须非常清楚this的运行机制,必须能够非常灵活的使用this.

​ 而这篇文章就阐述了我对JavaScript的关键字this的一些浅薄理解

什么是this

​ this,是指当前执行代码的环境对象。其实,搞清楚this只要搞清楚这两个概念就可以了:当前执行代码和环境对象

  1. 什么是当前执行代码

    说白了当前浏览器执行到哪一行代码
    
  2. 什么是环境对象

    说白了就是当前是哪一个对象在执行当前代码
    这个对象是从JavaScript内部代码来讲,而不是从浏览器角度去讲(如果是从浏览器角度去讲,执行JavaScript代码的是浏览器的JavaScript引擎)
    

this的一些特点

  1. this的值只有在运行执行中才能确定
  2. 在JavaScript中,函数的调用方式(默认调用,call/apply/bind,…)决定了this的值
  3. 在执行期间,this不能被赋值

this的使用

​ 如果使用好this,其实最根本的只要知道当前执行过程中this的值是什么,那么基本我们就能使用好关键字this

全局环境

​ 无论是否在严格情况下,在全局执行环境中(在任何函数体外部),this都指向全局变量

// 在浏览器中,输出为window对象
// 在Nodejs中,输出为{}
console.log(this)
函数(运行时)环境

​ 在函数内部,this的值取决于函数被调用的方式

常见的函数调用方式
  1. 简单调用

    'use strict'
    // 函数体
    function f(){
        console.log(this);
    }
    // 在浏览器中,打印window对象
    // 在Nodejs中,打印global对象
    // 在严格模式下,则输出undefined
    // 在严格模式下,如果this没有被执行环境(即函数没有被对象调用,那this则会为undefined)
    f();
    
  2. 使用call或者apply函数运行时内部的this值

    // obj对象
    var obj = {
        a:"hello obj"
    }
    // 函数f
    function f(){
        console.log(this);
    }
    // 函数执行时不指定this的值
    // 因为是在非严格模式下,所以打印window对象
    f();
    //函数执行时指定this的值为obj
    // 打印obj对象
    f.call(obj);
    //函数执行时指定this的值为obj
    // 打印obj对象
    f.apply(obj);
    

    注意:如果给apply或者call所传的this的值不是一个对象,则JavaScript会尝试使用内部的ToObject操作讲其转换为对象,即如果给call传递的参数为数字7,则7会强制转换成Number对象7

    var obj = 7;
    
    function f(){
        // 打印[Object Number]
        // 一般对于要获取一个变量的类型,我们可以使用typeof函数来获取变量的类型
        // 但是typeof所获取的变量类型还不够具体,例如如果获取数组类型ttypeof只能获取为对象
        // 我们可以使用Object.prototype.toString.call(变量)来获取变量更具体的类型
        console.log(Object.prototype.toString.call(this));
    }
    
    f.call(obj);
    
  3. 使用bind函数指定函数运行时内部的this值

    1. bind函数是Function原型上的方法,调用f.bind(obj)会返回一个于f相同作用域和函数体的函数,只是这个函数在执行过程中的this值已经绑死,无法再次修改该函数执行过程中this的值

    2. demo示例

      // 对象A
      var objA = {
          msg: "hello objA"
      }
      // 对象B
      var objB = {
          msg: "hello objB"
      }
      // 函数fn
      function fn() {
          console.log(this);
      }
      var f = fn;
      var g = fn.bind(objA);
      var h = g.bind(objB);
      // 打印window对象
      f();
      // 打印对象A
      g();
      // 打印对象B
      h();
      // 打印true
      console.log(f===fn);
      // 打印false
      console.log(g===fn);
      // 打印false
      console.log(h===g);
      
  4. 箭头函数

    1. 箭头函数中的this与该箭头函数在运行时的外部函数this的值相同

    2. 在箭头函数中,this与封闭词法环境的this保持一致。在全局代码中,它将被设置为全局对象

    3. demo1

      var outerObj = {
          // 返回outer对象
          inner: function () {
              return this
          },
          // 返回window对象
          // inner:()=>this
          this:this
      }
      // 因为箭头函数会使箭头函数在执行过程中,其内部this的值与外部执行过程中this的值相同
      console.log(outerObj.inner());  
      
    4. demo2

      // 对象obj
      var obj = {
          bar: function () {
              var x = () => this;
              return x;
          }
      };
      // fn1 = x = () => this;
      var fn1 = obj.bar();
      // 可以打印看看fn1是什么东西
      // console.log(fn1);
      // true
      console.log(fn1()===obj);
      // fn2 = function(){
      //     var x = () => this;
      //     return x;
      // }
      var fn2 = obj.bar;
      // 可以打印看看fn2是什么东西
      // console.log(fn2);
      // true
      console.log(fn2()()===window);
      
  5. 函数作为对象里的方法被调用

    1. 当函数作为对象里的方法被调用时,函数执行过程中this的值为调用该函数的对象

      // 对象obj
      var obj = {
      	msg:"hello obj"
      } 
      // 函数f
      function f(){
      	console.log(this);
      }
       // 将函数f作为对象obj的一个属性方法
      obj.f = f;
      // 调用obj的属性f
      // 打印对象obj
      obj.f();
      
    2. this 的绑定只受最靠近的成员引用的影响

  6. 当函数作为构造函数被调用时,它的this被绑定到正在构造的新的对象上

  7. 当函数被用作事件处理函数时,它的this指向触发事件的元素(一些浏览器在使用非addEventListener的函数动态添加监听函数时不遵守这个约定)

  8. 当代码被内联on-event 处理函数调用时,它的this指向监听器所在的DOM元素:

最后

​ 在这里,我总结一下我对关键字this的理解:

1. 一般来说函数中的this的值只有在执行过程中才能确定下来(当然,我们也可以直接使用Function.prototype.bind方法直接将函数的this值绑死),且this的值为当前环境中执行该函数的对象。若没有,在非严格模式下为全局对象。在严格模式下为undefined
2. 在执行函数的过程中,我们可以通过调用函数对象原型上的call方法和apply来执行函数内部this的值
3. 在DOM事件函数中,函数内的this的值是指向当前注册该事件函数的DOM

​ 对于JavaScript的this学习会对JavaScript这门语言的认识有了更深的了解

​ 若有不足之处,请大佬们多多指教!!!

Graybox Overview Graybox功能使能够在sub_module上执行扫描和ATPG操作,然后能够在更高层次的层次上执行扫描和ATPG操作时使用该子模块的简化的Graybox表示,从而简化了分层设计中的扫描插入和ATPG操作过程。由于子模块的graybox表示只包含极少量的互连电路(子模块与top的互连),在大型分层设计中使用graybox可以极大地减少执行扫描插入,优化计时,分析故障和创建测试pattern所需的memory和工具runtime。 阅读详情

相关推荐

VASP+机器学习快速收敛AIMD

本文介绍了如何利用VASP结合机器学习技术快速收敛AIMD(从头算分子动力学)模拟。首先,通过训练机器学习力场,生成关键文件如ML_ABN(包含结构数据集)、ML_FFN(存储回归结果)和ML_LOGFILE(记录训练日志)。接着,配置INCAR文件以设置计算参数,包括并行化、分子动力学和机器学习相关参数。KPOINTS文件用于定义K点网格。计算完成后,备份CONTCAR文件作为后续模拟的初始结构。最后,利用训练好的力场文件进行纯机器学习力场分子动力学模拟,并提交任务执行。

qq_44812865的博客 1406

深入理解JavaScript中的this

本文为转载文章,点击跳转原文地址 转载方便自己日后细品…正文开始: js 的 this 绑定问题,让多数新手懵逼,部分老手觉得恶心,这是因为this的绑定 ‘难以捉摸’,出错的时候还往往不知道为什么,相当反逻辑。 让我们考虑下面代码: var people = { name : "海洋饼干", getName : function(){ console.log(this.name); } }; window.onload = function(){ xxx.o

MyBlog 471

声发射传感器的工作原理是什么?

介绍声发射传感器的工作原理。

qq_39948394的博客 9246

JavaScript this关键字总结

this 前言 this 关键字在绝大多数语言里面都存在(C语言没有此关键字),与其他语言相比,函数的 this 关键字在 JavaScript 中的表现略有不同,此外,在严格模式和非严格模式之间也会有一些差别。 下面我们来详细的了解一下,JavaScript 中的 this 到底是什么。 定义 this的定义需要去看规范文档,在 ECMAScript [规范][http://w...

技术小屋 355

linux CentOS7安装VCS、Verdi、SCL

1.Linux下所需安装文件 链接:https://pan.baidu.com/s/1E_l4ARFYEnp57jlX95Bpog 提取码:ggdz ​ synopsysinstaller_v5.0 ​ scl_v2018.06 ​ vcs_mx_vO-2018.09-SP2 ​ vcs_vO-2018.09-SP2 ​ verdi-2018.9 2.Windows破解文件 ​ scl_keygen_2030 3.安装installer 打开终端,进入synopsysinstaller_

loveyelong的博客 4620

组态王7.5和SQLsever数据库交互

摘要:本文详细介绍了组态王7.5与SQL Server 2016数据库交互的实现流程,包括建立连接、数据存储与查询操作。主要内容涵盖ODBC数据源配置、数据库表格创建、数据插入及查询功能实现(含日期控件查询)

gsjkwg的博客 1583

JavaScript的关键字

关键字可用于表示控制语句的开始和结束,或者用于执行特定操作等等。按照规则,关键字也是语言保留的,不能用作标识符。 break: 用于switch语句和循环结构中, 在switch语句中的作用是立即结束当前的switch语句;在循环结构中的作用是立即结束当前的循环结构 case:存在于switch语句中,每存在一个case,酒存在一种选择情形 catch:存在于try.catch语句中,其中try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码 continue:c

y43991314的博客 1255

madgwick算法基于MPU9250姿态融合漂移问题的原因

基于MPU9250的madgwick算法姿态漂移问题原因 0、声明 因为这个是现象是不是共性目前本人还没研究过,只是在个体问题研究的基础上得出的结论,或许我买到的MPU9250是一个盗版:),所以只具备参考性。 1、现象 使用MPU9250的加速度计、角速度计、磁力计(AK8963)原始数据输入到madgwick算法中,得到的姿态最终会在停止姿态变化后仍然漂移一小段时间。其中加速度计和角速度计读取速率为400hz,磁力计为100hz,加速度计采样范围±2g,角速度计采样范...

GreedyZombie的博客 3873

【JS】JavaScript 中 this 关键字

this 是一个关键字,能够在函数执行过程中访问运行环境,它的值根据函数的调用方式和上下文而变化,所以 this 是动态的,动态指向当前函数的运行环境。this 是一个指针型变量,在 JavaScript 中没有指针的概念,但是this真实地指向当前调用对象,能够在函数内部访问和操作当前对象的属性和方法。

Eliaukoyx 1298

YOLO26全网首发:CVPR2026 FAA| 解决YOLO Neck跨尺度方向冲突--- FAAFusion频域对齐融合模块 | 暴力涨点篇

本文改进:FAAFusion引入YOLO neck ,代替nn.Upsample和Concat

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 644

prplOS amx-fxgi调试-订阅subscribe

本文分析了prplOS中amx-fxgi订阅功能(subscribe)的实现与调试过程。通过梳理订阅流程发现,默认订阅失败主要由于acl规则限制导致。文章详细介绍了订阅的两个关键步骤:建立GET长连接和POST设置订阅路径,并通过修改代码绕过acl验证成功实现订阅功能。最终验证了在同一连接下订阅多个路径及实时接收状态更新的可行性,有效降低了设备查询负载。该方案为prplOS的实时数据监控提供了优化思路。

四儿家的小祖宗的博客 330

在 JavaScript 和 Node.js 中,this关键字的用法

在 JavaScript 和 Node.js 中,this是一个关键字,它的值取决于函数被调用的方式,即this的上下文环境。

xuukai的博客 597

【AUTOSAR-E2E】-2.3-配置E2E:基于E2EPW配置一个RX接收的Signal Group(使用E2E Profile 1)

《共13页精讲》:此法也适用于E2E Profile 4/5/6/7/11/22 目录 1 检查CAN Matrix Arxml/DBC是否满足E2E需求 2 在DaVinci Developer中为Port添加E2E保护 3 在DaVinci Configurator settings设置 4 如何使用应用层的E2E保护 5 结尾 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <-.

「汽车电子助手」的博客 3953

【JS】JavaScript中的this关键字

JavaScriptthis关键词指的是它所属的对象。thisthisthisthisthis像call()和apply()这样的方法可以将 this 引用到任何对象。

故余虽愚,卒获有所闻 1027

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java script this_JavaScript this 关键字

JavaScript this 关键字面向对象语言中 this 表示当前对象的一个引用。但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。在方法中,this 表示该方法所属的对象。如果单独使用,this 表示全局对象。在函数中,this 表示全局对象。在函数中,在严格模式下,this 是未定义的(undefined)。在事件中,this 表示接收事件的元素。类...

weixin_28984915的博客 155

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

# JS this关键字笔记

面向对象语言中 this 关键字 表示当前对象的一个引用。但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变:如果单独使用,this 表示全局对象。在严格模式下也是表示全局对象。在web浏览器中全局对象是浏览器窗口Window对象。在函数中,this表示全局对象,但在严格模式下, this 是未定义的(undefined)。在对象方法中,this 表示该方法所属的对象。在事件中,this 表示接收事件的元素。

好女绪的博客 879

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JavaScript (JS) 中this关键字的作用?

JavaScript (JS) 中this关键字的作用? JS中的this是用来指向某个对象的 在一个普通的函数中,this指向了全局对象window。 在一个属于某个对象的函数中,this指向了该对象;如果它是在这个对象的函数的内部函数中,它会指向全局对象window。 在构造函数中,this会指向新创建的对象。 在事件处理函数中,this指向事件源,谁掉用它,它就指向谁。 ...

本人的技术和文笔有限,正在努力成长中,请各位朋友多多指正与包涵! 724

javascript 资源 js中关键字this的用法

js中关键字this的用法 [url]http://www.quirksmode.org/js/this.html[/url] javascript工具包[url]http://www.javascriptkit.com/[/url] cookie相关 [url]http://www.elated.com/articles/javascript-and-cookies/[/url...

天天成长的博客 217

JavaScript中的This 关键字

This 关键字 重要的事情说三遍: 注:This指向哪个对象不取决于函数定义的位置,而取决于调用的位置 注:This指向哪个对象不取决于函数定义的位置,而取决于调用的位置 注:This指向哪个对象不取决于函数定义的位置,而取决于调用的位置 this关键字是JavaScript中最复杂的机制之一。它是一个很特别的关键字,被自动定义在所有函数的作用域中。但是即使是非常有经验的JavaScript开发者也很难说清它到底指向什么。 实际上,JavaScript中this的机制并没有那么先进,但是开发者往往会把理解

qq_49002903的博客 1609

JavaScript this 关键字详解

一、前言 this关键字是JavaScript中最复杂的机制之一。它是一个很特别的关键字,被自动定义在所有函数的作用域中。对于那些没有投入时间学习this机制的JavaScript开发者来说,this的绑定一直是一件非常令人困惑的事。 二、了解this 学习this的第一步是明白this既不指向函数自身也不指向函数的词法作用域,你也许被这样的解释误导过,但其实它们都是错误的。随着函数使用场合的不同,this的值会发生变化。但总有一条原则就是JS中的this代表的是当前行为执行的主体,在JS中主要研究的都是

XZSJ_Front的博客 384

JavaScript-this关键字

总结一下,JavaScript 语言之中,一切皆对象,运行环境也是对象,所以函数都是在某个对象之中运行,this就是函数运行时所在的对象(环境)。这本来并不会让用户糊涂,但是 JavaScript 支持运行环境动态切换,也就是说,this的指向是动态的,没有办法事先确定到底指向哪个对象,这才是最让初学者感到困惑的地方。上面代码中,函数add()内部并没有this,使用bind()方法的主要目的是绑定参数x,以后每次运行新函数plus5(),就只需要提供另一个参数y就够了。稍微改动一下,就可以看得更清楚。

qq_58738794的博客 1024

JS this关键字

qq_33761266的博客 214

JS/JavaScript中 this 关键字对象详解

① 谁调用或者哪个对象调用 this所在的函数,this就指向谁。如果有嵌套调用,则其值会被绑定到调用this所在函数的最近的父对象。不论这个this出现在什么样的函数中,层次有多深,结构多复杂,只要看直接包含它的函数即可。 ② “this” always refers to the “owner” of the function we're executing。 ③ this通常指向的是我们正在执行的函数本身,或者是,指向该函数所属的对象。 ④ this是Javascript语言的一个关键字,它代表函数运

有范管理美学 | 公众号/头条号:有范管理美学 2230

JavaScript(JS) this关键字

this关键字作用就是引用,并且它通常只写在函数内部就是函数体内,在JavaScript(JS)中this的引用对象随着函数的使用环境变化而变化,可以是普通函数、构造函数、对象属性、apply&call方法。灵活运用this可以提升代码的性能和复用性。 原文地址:JavaScript(JS) this关键字 ...

亮亮的专栏 138

JS this关键字详解

Js中this关键字到底指的是什么?这篇文章用实验证明

kydkong的博客 332

JS的this关键字详解

学习JS的this关键字往往难以理解和应用,本文详细解读JS中的this关键字,并结合案例给出相应的解释。PS:整理了后端开发的知识网络,欢迎Star!

qq_41124175的博客 1285
上一篇: JavaScript Promise对象
下一篇: JavaScript Array常用方法的实现
Re_Code
博客等级 码龄9年 2粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值