js中的this关键字

【Javascript】深入理解this作用域问题以及new/let/var/const对this作用域的影响 理解this作用域 《javascript高级程序设计》中有说到: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,this等于那个对象。不过,匿名函数具有全局性,因此this对象同常指向window 针对于匿名函数this具有全局性的观点仍是有争议的,可参考 https://www.zhihu.com/question/2... 阅读详情

在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的。JavaScript也提供了这个this关键字,不过用起来就比经典OO语言中要"混乱"的多了。

    下面就来看看,在JavaScript中各种this的使用方法有什么混乱之处?

    1、在HTML元素事件属性中inline方式使用this关键字:

  < div  onclick ="
 // 可以在里面使用this

 ">division element</div>


    我们一般比较常用的方法是在此使用:javascirpt: EventHandler(this),这样的形式。不过这里其实可以写任何合法的JavaScript语句,要是高兴在此定义个类也可以(不过将会是个内部类)。这里的原理是脚本引擎生成了一个div实例对象的匿名成员方法,而onclick指向这个方法。

    2、用DOM方式在事件处理函数中使用this关键字:

  < div  id ="elmtDiv" > division element </ div >
 
< script  language ="javascript" >
 
var div = document.getElementById('elmtDiv');
 div.attachEvent('onclick', EventHandler);

 
function EventHandler()
 
{
    // 在此使用this

 }

 
</ script >


    这时的EventHandler()方法中的this关键字,指示的对象是IE的window对象。这是因为EventHandler只是一个普通的函数,对于attachEvent后,脚本引擎对它的调用和div对象本身没有任何的关系。同时你可以再看看EventHandler的caller属性,它是等于null的。如果我们要在这个方法中获得div对象引用,应该使用:this.event.srcElement。

    3、用DHTML方式在事件处理函数中使用this关键字:

  < div  id ="elmtDiv" > division element </ div >
 
< script  language ="javascript" >
 
var div = document.getElementById('elmtDiv');
 div.onclick 
= function()
 
{
   
// 在此使用this
 
}
;
 
</ script >


    这里的this关键字指示的内容是div元素对象实例,在脚本中使用DHTML方式直接为div.onclick赋值一个EventHandler的方法,等于为div对象实例添加一个成员方法。这种方式和第一种方法的区别是,第一种方法是使用HTML方式,而这里是DHTML方式,后者脚本解析引擎不会再生成匿名方法。

    4、类定义中使用this关键字:

  function  JSClass()
  {
      
var  myName  =  'jsclass';
      
this .m_Name  =  'JSClass';
  }

  JSClass.prototype.ToString 
=   function ()
  {
      alert(myName 
+  ', '  +   this .m_Name);
  };

  
var  jc  =   new  JSClass();
  jc.ToString();


    这是JavaScript模拟类定义中对this的使用,这个和其它的OO语言中的情况非常的相识。但是这里要求成员属性和方法必须使用this关键字来引用,运行上面的程序会被告知myName未定义。

    5、为脚本引擎内部对象添加原形方法中的this关键字:

  Function.prototype.GetName  =   function ()
  {
      
var  fnName  =   this .toString(); 
      fnName 
=  fnName.substr( 0 , fnName.indexOf('(')); 
      fnName 
=  fnName.replace( /^ function / , ''); 
      
return  fnName.replace( / ( ^ /s + ) | (/s + $) / g, '');
  }
  
function  foo(){}
  alert(foo.GetName());    


    这里的this指代的是被添加原形的类的实例,和4中类定义有些相似,没有什么太特别的地方。

    6、结合2&4,说一个比较迷惑的this关键字使用:

   function  JSClass()
  {
      
this .m_Text  =  'division element';
      
this .m_Element  =  document.createElement('DIV');
      
this .m_Element.innerHTML  =   this .m_Text;
        
      
this .m_Element.attachEvent('onclick',  this .ToString);
  }
   
  JSClass.prototype.Render 
=   function ()
  {
      document.body.appendChild(
this .m_Element);
  }     

  JSClass.prototype.ToString 
=   function ()
  {
      alert(
this .m_Text);
  };

  
var  jc  =   new  JSClass();
  jc.Render(); 
  jc.ToString();


    我就说说结果,页面运行后会显示:"division element",确定后点击文字"division element",将会显示:"undefined"。

    7、CSS的expression表达式中使用this关键字:

   < table  width ="100"  height ="100" >
      
< tr >
          
< td >
              
< div  style ="width: expression(this.parentElement.width); 
                    height: expression(this.parentElement.height);"
>
                  division element
</ div >
          
</ td >
      
</ tr >
  
</ table >


    这里的this看作和1中的一样就可以了,它也是指代div元素对象实例本身。

    8、函数中的内部函数中使用this关键字:

   function  OuterFoo()
  {
      
this .Name  =  'Outer Name';
 
      
function  InnerFoo()
      {
          
var  Name  =  'Inner Name'; 
          alert(Name 
+  ', '  +   this .Name);
      }
      
return  InnerFoo;
  }
  OuterFoo()();


    运行结果显示是:"Inner Name, Outer Name"。按我们在2中的讲解,这里的结果如果是"Inner Name, undefined"似乎更合理些吧?但是正确的结果确实是前者,这是由于JavaScript变量作用域的问题决定的,详细了解推荐参看"原来JScript中的关键字'var'还是有文章的"一文及回复。

    说了这么多JavaScript中this的用法,其实this最根本的特性还是和OO语言中的定义相吻合的。之所以有这么多看似混乱的使用方式,是因为JavaScript语言(解释器和语言本身的内容)本身在实现上是遵循OO的(Object-based),连它的所有数据类型都是对象,也有Object这样一个super Object。但是这个语言在运行上(runtime),就没有遵循完备的OO特点,所以就出现了this的指代混乱。

    JavaScript里还有什么地方有this的使用呢?我暂时能想到的就这些了,欢迎讨论补充。

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

相关推荐

Mathcad在LLC谐振变换器设计中的公式推导实战

本文通过Mathcad软件,详细演示了LLC谐振变换器设计的核心公式推导实战。文章阐述了如何利用Mathcad作为“会思考的草稿纸”,从定义基本参数、应用基波近似法(FHA)模型,到逐步推导电压增益公式及确定工作边界频率(fmin, fmax),并展示了如何通过动态参数扫描进行优化设计,帮助电源工程师高效、直观地完成理论计算,为后续仿真与实现奠定坚实基础。

q1w3e5r7t9y的博客 297

JavaScript中this关键字使用方法详解

    在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的。JavaScript也提供了这个this关键字,不过用起来就比经典OO语言中要"混乱"的多了。    下面就来看看,在JavaScript中各种this的使用方法有什么混乱之处?    1、在HTML元素事件属...

weixin_33919941的博客 376

nRF52840 低功耗蓝牙开发指南:从硬件架构到物联网应用实战

本文深入解析nRF52840低功耗蓝牙芯片的硬件架构与开发实践,涵盖从开发环境搭建到BLE协议栈开发的详细指南。通过实战案例分享低功耗优化技巧,帮助开发者高效实现物联网应用,特别适合智能家居和工业场景。

d3e4f的博客 417

jQuery操作css

操作css 一、参数只写属性名,则是返回属性值 $(this).css('color'); 二、参数是属性名,属性值,逗号分隔,是设置一组样式,属性必须加逗号,如果是数字可以不写单位和引号 $(this).css('backgroundColor','pink'); 三、参书可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开,属性可以不用加引号。 $('div').css({ width: '200px',

weixin_45802907的博客 633

spring boot 集成cas(一) 服务端搭建

简单点就是统一服务认证,多个系统一次登录。俗称单点登录。

慕孑晨的博客 1956

配置cts performance最优范围

这里写自定义目录标题cts例如此案例中,我们多测几次,发现Measured frame rate 的平均值为average=(380+389+380+371)/4=380 cts by VinterYoung Expected achievable frame rates for OMX.MTK.VIDEO.DECODER.HEVC video/hevc 1280x720: [75.0, 262.0]. Measured frame rate: [380.5645006622224, 389.3983545

o343196469的博客 1318

JavaScript 中 this 指向混乱的原因

4、显式绑定问题:使用 .call()、.apply() 或 .bind() 方法可以显式地绑定函数的 this,但如果不小心使用或错误地使用这些方法,也可能导致 this 指向混乱。5、箭头函数中的 this:箭头函数没有自己的 this 绑定机制,它会从外围作用域继承 this。6、异步操作中的 this:在异步函数或回调函数中,this 的指向可能会发生变化,因为它们的执行上下文可能会改变。● 使用 .bind()、.call() 或 .apply() 方法显式地绑定函数的 this。

前端小白的博客 583

Plant Simulation新手入门:从零开始搭建工厂布局仿真模型(附完整代码)

本文为Plant Simulation新手提供了一个从零开始搭建工厂布局仿真模型的完整实战教程。通过一个玩具工厂车间布局优化的具体案例,详细讲解了从数据准备、模型构建、核心逻辑编程到连接遗传算法进行自动优化的全流程,并附有完整代码示例,帮助读者快速掌握这一工业仿真软件的核心应用。

metal的博客 553

关于JS中this对象指向问题总结

关于JS中this对象指向问题,相信做过项目的小伙伴多多少少都会遇到过,明明感觉代码写的没问题,可是运行的时候,就会报错,比如报错 xxx is not a function。我最近也遇到了,百度学习了不少前辈对于this对象指向问题的解析,于是总结了这篇文章。

铁锤妹妹的博客 4683

node: /lib64/libstdc++.so.6: version `CXXABI_1.3.11‘ not found (required by node) 解决方案

本文主要介绍了node: /lib64/libstdc++.so.6: version `CXXABI_1.3.11’ not found (required by node) ,希望能对使用nodejs的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

Python爬虫实战:逆向工程与异步爬虫技术,高效抓取国家知识产权局专利数据

相比于传统的Selenium,Playwright由微软开发,支持多浏览器(Chromium, Firefox, WebKit),API更现代,执行速度更快,并且能轻松录制用户操作生成代码。通常,列表中的摘要信息是缩略的,我们需要进入每个专利的详情页获取完整信息(如主权要求、法律状态等)。我们的第一步是手动操作一遍搜索流程,并用Playwright的“录制”功能或开发者工具,找出真正返回专利数据的那一个或多个网络请求。以友好的、对人类行为模拟的方式爬取数据是基本的网络礼仪,也能有效避免你的IP被封锁。

2201_76125261的博客 2419

【JS】JavaScript 中 this 关键字

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

Eliaukoyx 1297

华为昇腾(Ascend)开发考试原题目解析 (2024) (题库一)——HCIP-AI-Ascend Developer——第一部分

给出一段代码如下,以下哪个选项描述错误?...A.中的语句由 MindSpore 接管,有语法限制B. 算子在中定义,并用来建立网络C.__init__()中的语句由 Python 解析执行D. 网络定义必须继承基类nn.Cell正确答案: B__init__()用于定义算子和网络层。所有需要用到的层(如卷积层、全连接层等)都应该在这里进行实例化。这部分代码由Python解释器执行。用于构建前向计算图。它调用在__init__()中定义好的算子和层来描述数据的流向。

qq_38334677的博客 1053

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

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

xuukai的博客 596

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【JS】JavaScript中的this关键字

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

故余虽愚,卒获有所闻 1026

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JavaScript中的This 关键字

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

qq_49002903的博客 1609

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java script this_JavaScript this 关键字

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

weixin_28984915的博客 155

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

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

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

JavaScript中的this关键字解析

在JavaScript的世界里,this是灵活多变的舞者;掌握它的规则,才能跳出优雅的代码之舞。

chaosweet的博客 952

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

# JS this关键字笔记

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

好女绪的博客 878

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

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

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

JavaScript中的this关键字详解

this是JavaScript中的一个关键字,表示函数运行时的调用上下文。this的值在函数被调用时确定,而不是在定义时确定。this的值取决于函数的调用方式:全局调用:this指向全局对象(浏览器中是window对象方法调用:this指向调用该方法的对象构造函数调用:this指向新创建的实例使用callapplybindthis指向指定的对象箭头函数没有自己的this,它继承自外部作用域。this在普通函数和箭头函数中的行为差异是JavaScript中最容易混淆的概念之一。

yk_dflkg的博客 1335

​​深入理解 JavaScript 中的 this 关键字

在 JavaScript 中,this是一个核心概念,但它也是最容易让人困惑的部分之一。理解this的机制对于编写健壮、可维护的代码至关重要。this的值取决于函数如何被调用,而不是在哪里定义。以下让我们来了解一下this关键字,并通过实例来了解。​🚀 掌握this,让你的 JavaScript 代码更精准、更强大!​。

2501_92234528的博客 912

JavaScript-this关键字

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

qq_58738794的博客 1024

JavaScript this 关键字详解

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

XZSJ_Front的博客 384
上一篇: event.srcElement
下一篇: cookie和session的区别
msg_java2011
博客等级 码龄15年 18粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值