js中this的理解

JavaScript中this的理解 JavaScript中this的理解 在 JavaScript 编程中,this 关键字非常重要,也比较难理解,经常让初学者比较迷惑,所有今天我们一起来聊一下this关键字。 一.this的概述 this是Javascript语言的一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,随着函数使用场合的不同,this的值会发生变化,但是有一个总的原则,那就是this指的是调用函数的那个对象。 总结:谁调用了这个函数,this指向谁(对象) 二.this的指向 因为this存在于函数内部, 阅读详情

最近写js代码的时候,很多时候会用到this,但还不是很清楚所以今天稍微总结一下,首先稍微简单区分一下js的this和jQuery中的$(this)

this是一个html元素
(this)是一个变量名,说明是jQuery对象,即把DOM对象转换为jQuery对象∗∗注∗∗:jQuery包装了各种浏览器版本即DOM对象的操作,因此统一使用(this)是一个变量名,说明是jQuery对象,即把DOM对象转换为jQuery对象 **注**:jQuery包装了各种浏览器版本即DOM对象的操作,因此统一使用(this)是一个变量名,说明是jQuery对象,即把DOM对象转换为jQuery对象∗∗注∗∗:jQuery包装了各种浏览器版本即DOM对象的操作,因此统一使用(this)而不用this应该是不错的选择

下面进入正题

  • this总是指向调用函数的那个对象,判断this的指向,要看执行时指向哪,而不是声明时指向哪.
  • this在函数式编程中很少用到,甚至用不到,在面向对象编程中用到的时候很多,this不能被赋值.

1.this和构造器

this总是挂属性/字段,方法都应在原型上
function Tab(nav, content) {
  this.nav = nav
  this.content = content
}
  
Tab.prototype.getNav = function() {
  return this.nav;
};
Tab.prototype.setNav = function(nav) {
  this.nav = nav;
};
Tab.prototype.add = function() {
};

2.this和对象

js中的对象不用类也可以创建,因为是面向对象编程而不是面向类编程

var tab = {
  nav: '',
  content: '',
  getNav: function() {
    return this.nav;
  },
  setNav: function(n) {
    this.nav = n;
  }
}

3.this和函数

this和独立的函数放在一起没有意义,一般尽量不要在纯函数中使用this,如果有时候需要使用,调用方式使用call/apply

function showMsg() {
  alert(this.message)
}
  
var m1 = {
  message: '输入的电话号码不正确'
}
var m2 = {
  message: '输入的身份证号不正确'
}
  
showMsg.call(m1) // '输入的电话号码不正确'
showMsg.call(m2) // '输入的身份证号不正确'

这中方式可以节省一定的代码量,当两个类或对象有相似方法,不必定义两个,只需要定义一个,然后将其绑定在各自的对象和原型上

4.全部环境的this

在js中,非函数内直接使用var声明的变量默认为全局变量,且默认挂在window上作为属性.

var x = 10;
function func() {
  alert(this.x)
}
var obj = {
  x: 20,
  fn: function() {
    alert(this.x)
  }
}
var fn = obj.fn
func() // 10
fn() // 10

例如这段程序的输出结果都为10,这还是一句开始强调的那句话,看执行,而不是看定义.

4.this和DOM事件

对于dom元素节点来说,它们很多的内部方法用到的this都是指向自己的,为元素节点添加事件,执行时,this指向元素节点自身.

<div id="nav"></div>
<script>
  nav.onclick = function() {
    alert(this) // 指向div#nav
  }
</script>

this可以被call和apply改变

js是动态语言,即拥有动态的数据类型,动态的函数执行和动态的方法执行,其中函数的动态执行的体现是eval,apply和call

call和apply的第一个参数为上下文的this,在this的改变上,两者没有区别

var m1 = {
  message: 'This is A'
} 
var m2 = {
  message: 'This is B'
} 
  
function showMsg() {
  alert(this.message)
}
  
showMsg() // undefined
showMsg.call(m1) // 'This is A'
showMsg.call(m2) // 'This is B'

7.ES5中新增的bind和this

bind即为cal/apply的高级版,不过低版本的IE不支持,需要修复Function.prototype

var modal = {
  message: 'This is A'
}
  
function showMsg() {
  alert(this.message)
}
  
var otherShowMsg = showMsg.bind(modal)
otherShowMsg() // 'This is A'

8.ES6箭头函数(arrow function) 和 this

判断 this 指向谁,看执行时而非定义时,只要函数(function)没有绑定在对象上调用,它的 this 就是 window
是的,前面一直用这句话来判断 this 的指向,在箭头函数里前面半句就失效了。
箭头函数的特征就是,定义在哪,this 就指向那。即箭头函数定义在一个对象里,那箭头函数里的 this 就指向该对象。

var book = {
  author: 'John Resig',
  init: function() {
    document.onclick = ev => {
      alert(this.author) ; // 这里的 this 不是 document 了
    }
  }
};
book.init()

箭头函数让 JS 回归自然和简单,函数定义在哪它 this 就指向哪,定义在对象里它指向该对象,定义在类的原型上,指向该类的实例,这样更容易理解。

小结:函数的上下文 this 是 JS 里不太好理解的,在于 JS 函数自身有多种用途。目的是实现各种语言范型(面向对象,函数式,动态)。this 本质是和面向对象联系的,和写类,对象关联一起的, 和“函数式”没有关系的。如果你采用过程式函数式开发,完全不会用到一个 this。 但在浏览器端开发时却无可避免的会用到 this,这是因为浏览器对象模型(DOM)本身采用面向对象方式开发,Tag 实现为一个个的类,类的方法自然会引用类的其它方法,引用方式必然是用 this。当你给DOM对象添加事件时,回调函数里引用该对象就只能用 this 了。

JS中onclick与addEventListener的区别详解 一、onclick: 1.onclick添加事件:        语法: element.onclick = function (){};        实例如下: 点我 var box1 = document.getElementById(box1); box1.onclick = function(){ console.log(我是第一个); } box1.onclick = function(){ console.log(我是第二个); }        结果:        以上结果显示,点 立即下载

相关推荐

【ArcGIS】ArcMap中北京1954坐标系转WGS84的实战技巧与参数选择

本文详细解析了在ArcMap中将北京1954坐标系数据转换为WGS84坐标系的完整流程与核心技巧。针对常见的坐标偏移问题,文章首先强调了数据“归位”的重要性,并提供了处理假东、假北值的具体操作步骤。随后,重点阐述了地理变换参数(如Beijing_1954_To_WGS_1984_2)的选择逻辑及其对转换精度的决定性影响,并结合案例说明了参数选择、中央经线确认及结果验证等关键环节,旨在帮助用户高效、准确地完成坐标转换。

f6g7h8i9j的博客 329

javascript里面关于绑定click的this和onclick触发this的区别

之前在做项目的时候,有时候会直接

a413883127的专栏 2322

别再凭感觉选电容了!手把手教你计算电机控制器里的母线电容(附Excel计算工具)

本文详细解析了电机控制器中母线电容的选型方法,从理论计算到工程实践,帮助工程师避免常见误区。通过精确计算纹波电压、电容容量等关键参数,并结合薄膜电容与电解电容的性能对比,提供实用的选型建议。附带的Excel计算工具可快速完成参数计算,适用于工业伺服驱动和电动车电机控制器设计。

weixin_28720573的博客 514

如何理解js中的this

this的值取决于它所在的函数如何被调用。下面是this可以获得新值的6种不同方式:下面我们一起来看看this是如何在每个环境中被改变的。当this在任何函数外面被调用时,也就是说在全局环境中被调用,在浏览器中。它默认指向window对象。 一般在全局环境中,我们很少用this关键字 ,所以我们对它也没有那么在意,继续看下一个环境。当我们使用new关键字创建一个对象的新的实例时,this关键字指向这个实例。 通过上面的代码,我们会发现,greg是Human的一个实例,现在无论何时调用greg,thi

weixin_69830171的博客 2054

Hifiasm参数调优实战:当N50不理想时的7个排查方向与解决方案

本文详细解析了Hifiasm参数调优实战,针对基因组组装中N50不理想的7个排查方向与解决方案。通过调整--hom-cov、-D、-N等核心参数,结合HiFi数据和参考基因组分析,有效提升组装质量。文章以猪毛菜基因组为例,展示了从2.1MB到4.3MB的N50优化过程,为生物信息学研究者提供实用指南。

weixin_30642561的博客 425

最小可分辨对比度(MRC)

最小可分辨对比度的测试方法如下: 1)选择对比度测试靶板,一般有100%,50%,33.77%,15%,5%。 2)调整照度,确保能够清晰观测到图像中的靶标; 3)利用USAF1951分辨率靶观察找到能够分辨出的靶标。 1951 USAF分辨力测试图目前仍广泛地应用于测试光学成像系统(如显微镜和相机)的分辨能力。这种图案包括几组由三条短线构成组合,短线的尺寸从大到小。成像系统无法辩明的...

6272

关于React项目中的import xxx和import {}的区别

关于React项目中的import xxx和import {}的区别

qq_44606064的博客 1138

64.企业级案例(上)-金融行业DDD落地全流程支付系统-附架构演进图

本文以金融支付系统为例,完整展示了DDD在企业级项目中的落地流程。首先通过事件风暴识别核心业务领域,包括交易、渠道、账务等限界上下文。在战略设计中划分上下文边界,确定交易上下文为核心域。战术设计聚焦交易上下文,详细设计了支付单聚合、值对象和支付路由服务。架构实现采用CQRS+EDA模式,通过命令端处理交易,查询端异步更新读模型,并利用防腐层隔离外部渠道。案例展示了DDD从业务探索到架构实现的全过程,体现了其在复杂业务系统中的价值。

yonggeit的博客 3036

onclick事件属性与在用js绑定onclick事件中的this的区别

一句话:this永远指向所在函数的拥有者. 举几个例子: 1.id为"aa"的a元素有一个onclick属性,属性值为f1() <a href="javascript:;" title="" id="aa" onclick="f1()">分类列表</a> //f1的定义function f1(){console.log(this);} ...

373

CCF编程培训师资认证(PTA)标准(教学能力T)

随着计算机科学的不断发展,计算机相关技术应用到社会各个行业,越来越多的青少年参加到了计算机程序设计的学习中,这对编程培训教师提出了更高的专业要求和职业要求。CCF开展编程培训师资认证项目(Programming Trainer Accreditation,PTA),旨在建立一个规范的、科学的、权威且有公信力的三方认证。认证考试分编程专业能力(P)和教学能力(T)两部分。本标准根据《CCF编程培训师资认证条例》第十条制定,旨在明确教学能力(T)的测试标准。

lan_in的博客 1708

【零基础入门unity游戏开发——unity通用篇14】unity特性相关的知识(基于unity6开发介绍)

unity特性相关的知识(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1203

java script this_彻底理解javascript中的this指针

this关键字对于javascript初学者,即便是老手可能都是一个比较容易搞晕的东西。本文试图理顺这个问题。this和自然语言的类比实际上js中的this和我们自然语言中的代词有类似性。比如英语中我们写"John is running fast because heis trying to catch the train"注意上面的代词"he",我们当然可以这样写:"John is runnin...

weixin_36054993的博客 651

2025资源从哪里来!

研究网络通信中的安全问题,如VLAN划分、路由协议(静态、动态如OSPF、BGP)、NAT转换、AAA认证、访问控制列表(ACL)等。‌Wi-Fi安全设置‌、‌密码破解原理‌(仅用于合法测试或教育目的)、‌常见Web安全问题‌如SQL注入、XSS跨站脚本攻击等的防范措施。在这个网站你可以找到你对应的专业-对应的路线-对应的资源-对应的百度网盘里面全是免费的资源------------------惊喜不?‌防火墙配置与策略‌、‌入侵检测与防御系统(IDS/IPS)‌、‌端口扫描与漏洞扫描技术‌等。

qq_56248592的博客 1902

理解js中this的指向

转载自彻底理解js中this的指向,不必硬背。

Wind_waving的博客 128

VC中sqlite的使用

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

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

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

彻底理解js中this的指向

点击打开链接彻底理解js中this的指向

PanPa_WoNiu的博客 272

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

对JavaScript中 this 关键词的理解

当我开始学习Vue时,this关键词给我带来了恶梦。我花了很多时间去学习和实践,今天我将和大家分享我对 `this` 关键词的一些理解。

Create value with coding 4884

全面理解JS中的this

JavaScript开发中,我们经常会用到this,也经常会因为this头疼,为什么呢,因为有时候我们不知道this到底指的是什么?怎么用? 其实this是执行上下文对象的一个属性,执行上下文中有三个重要的属性,作用域链(scopeChain)、变量对象(VO)和this。 this是在进入执行上下文时确定的,也就是在函数执行时才确定,并且在运行期间不允许修改并且是永久不变的。 我们分各种执行上下文情况来详细解读下this: 一、在全局代码中的this 在全局代码中this 是不变的,this始终

txun123的博客 3038

javascript中对this的理解

在JavaScript中,this不是固定不变的,它的指向取决于上下文环境,一般的,认为this指向使用它时所在的对象。主要有以下几类指向: 在方法中,this 表示该方法所属的对象。 如果单独使用,this 表示全局对象。 在函数中,this 表示全局对象。 在函数中,在严格模式下,this 是未定义的(undefined)。 在事件中,this 表示接收事件的元素。 类似 call() 和 apply() 方法可以将 this 引用到任何对象。 this代表的是 执行这个this代码的环境对

WiChat的博客 2052

JS中this的理解

我们在编写代码的过程中经常会遇到this的指向问题,下面对this的指向做一个总结 一、THIS: 1)全局上下文中的this是window; 2)块级上下文中(如:判断体“{}”,循环体“{}”)中没有自己的this,它的this是继承所在上下文中的this的; 3)在函数的私有上下文中,this的情况会多种多样,也是接下来我们重点研究的; 二、函数中的THIS: THIS不是执行上下文(EC才是执行上下文),THIS是执行主体 如何理解主体呢? 如: 张三拿着加了五个鸡蛋的煎饼果子去北京大饭店吃早

u012352278的博客 373

js this理解

http://www.jb51.net/article/16235.htm

feiyeguohai1的博客 311

【JS】JS中对于this的理解

一、对this的产生原因分析和了解 第一:this指的是函数运行时所在的环境(即调用的对象)。 第二:JavaScript 语言之所以有this的设计,跟内存里面的数据结构有关系(内存存储详细理解参考原文)。 总结如下: 对于普通对象的保存:实际对象属性的值就是值; 对于函数的保存:实际函数属性的值是函数的地址;(而函数本身,可理解为:它不属于任何一个对象,相当...

diangui9878的博客 121

图说js中的this——深入理解javascript中this指针

没搞错吧!js写了那么多年,this还是会搞错!没搞错,javascript就是回搞错!…………在写java的时候,this用错了,idea都会直接报错!比如……但是,js,……idea,爱莫能助了……在面向对象编程里有两个重要的概念:一个是类,一个是实例化的对象,类是一个抽象的概念,用个形象的比喻表述的话,类就像一个模具,而实例化对象就是通过这个模具制造出来的产品,实例化对象才是我们需要的实实在...

周陆军的博客,分享it技术。 2096

对JS中This的理解和总结

在Javascript里的this,是无法在定义时就决定指向谁(也可说是不受词法作用域的限制,或者静态作用域的限制),这个行为和动态作用域相似,这个东西无法在js编译器工作时就定下来,而得等到js引擎的执行阶段时才确定 一,调用位置 函数里this由函数调用位置决定的,可以看看下面的例子: var a = "I'm a global a" function foo () { console.lo...

weixin_44646986的博客 343

JS 对this的理解解说

首先要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉),那么接下来我会深入的探讨这个问题。  例子1:...

developerFBI的专栏 257
上一篇: js中字符串的相关操作
下一篇: cookies和localStorage和sessionStorage的区别
codezha
博客等级 码龄10年 28粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值