位置: 编程技术 - 正文

JavaScript中的this,call,apply使用及区别详解(javascript中的this)

编辑:rootadmin

推荐整理分享JavaScript中的this,call,apply使用及区别详解(javascript中的this),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript中的基本数据类型有哪些,JavaScript中的数据类型分哪为两大类?,javascript中的this,javascript中的this指向变量,javascript中的this指向变量,JavaScript中的this指向,javascript中的this指向变量,JavaScript中的this指向,内容如对您有帮助,希望把文章链接给更多的朋友!

学习起因:

在之前的JavaScript学习中,this,call,apply总是让我感到迷惑,但是他们的运用又非常的广泛。遂专门花了一天,来弄懂JavaScript的this,call,apply。

中途参考的书籍也很多,以《JavaScript设计模式与开发实践》为主,《JavaScript高级程序设计》、《你不知道的JavaScript》为辅。这三本书对我理解this,call,apply都起了很大的帮助。

this

首先,我们先讲述this。

在《JavaScript设计模式与开发实践》关于this的描述中,我认为有一句话切中了this的核心要点。那就是:

JavaScript的this总是指向一个对象具体到实际应用中,this的指向又可以分为以下四种:

作为对象的方法调用 作为普通函数调用 构造器调用 apply和call调用

接下来我们去剖析前3点,至于第4点的apply和call调用,会在call和apply部分详细讲解。

1.作为对象的方法调用

说明:作为对象方法调用时,this指向该对象。举例:

2.作为普通函数调用

说明:作为普通函数调用时,this总是指向全局对象(浏览器中是window)。举例:

3.构造器调用

说明:作为构造器调用时,this指向返回的这个对象。举例:

JavaScript中的this,call,apply使用及区别详解(javascript中的this)

但是如果构造函数中手动指定了return其它对象,那么this将不起作用。如果return的是别的数据类型,则没有问题。

4.Call和Apply

Call和Apply的用途一样。都是用来指定函数体内this的指向。

Call和Apply的区别

Call:第一个参数为this的指向,要传给函数的参数得一个一个的输入。Apply:第一个参数为this的指向,第二个参数为数组,一次性把所有参数传入。

如果第一个参数为null,则this指向调用的本身。

1.改变this指向

说明:这是call和apply最常用的用途了。用于改变函数体内this的指向。举例:

2.借用其它对象的方法

这儿,我们先以一个立即执行匿名函数做开头:

函数具有arguments属性,而arguments是一个类数组。但是arguments是不能直接调用数组的方法的,所以我们要用call或者apply来调用Array对象的原型方法。原理也很容易理解,比如刚才调用的是push方法,而push方法在谷歌的v8引擎中,源代码是这样的:

它只与this有关,所以只要是类数组对象,都可以调用相关方法去处理。

这部分内容比较复杂,再加上自己水平也不太够。所以推荐有条件的同学去购买相关书籍,或者等我的后续博客文章。

感想

通过对这部分的学习,算是加深了对JavaScript的理解。最直观的表现就是,去看一些优秀框架的源代码时,不再是被this,call,apply,bind绕的晕乎乎的。还是很开心的~

下一段时间,准备深入探索一下日常学习和使用的CSS。毕竟JavaScript学了,HTML和CSS也不能落下。

JavaScript数据结构与算法之栈与队列 学习起因曾经有一次在逛V2EX时,碰到这么一个帖子。数学完全还给老师了,想学回一些基础数学,大概是高中程度的,有什么书籍推荐?发帖的楼主大

JavaScript数据结构与算法之链表 链表简介链表是一种常见的数据结构,也属于线性表,但不会按线性的顺序来储存数据。而是在每一个节点中,储存了下一个节点的指针。可以看图理

JavaScript数据结构与算法之集合(Set) 集合(Set)说起集合,就想起刚进高中时,数学第一课讲的就是集合。因此在学习集合这种数据结构时,倍感亲切。集合的基本性质有一条:集合中元素是

标签: javascript中的this

本文链接地址:https://www.jiuchutong.com/biancheng/369963.html 转载请保留说明!

上一篇:javascript中的3种继承实现方法

下一篇:JavaScript数据结构与算法之栈与队列(javascript数据结构与算法)

  • 哪些保险保障基金可税前扣除
  • 工程项目需要交5000万保证金合理吗
  • 多交企业所得税可以放弃退税吗
  • 收到发票未收到款
  • 未开票收入缴纳增值税怎么冲减补开发票
  • 个人所得税专项扣除子女教育标准
  • 研发项目增值税税率
  • 增值税和个人所得税都要交吗
  • 个税扣除项生效日期
  • 营业成本在资产负债表哪里
  • 公司付其他公司的工资
  • 代缴五险一金自己还需要缴纳吗
  • 向投资者分配现金股利会影响负债吗
  • 旅游开发公司有什么职位
  • 职工福利企业所得税
  • 承兑 拆分
  • 销售费用现金支付
  • 会计学中递延收益怎么算
  • 进项税转出企业所得税账务怎么处理
  • 美元转到中国账户可不可以取人民币
  • 企业融资租赁设立条件
  • 外购材料运输费怎么入账
  • 电梯安装简易征收的优点
  • 个人去税务局开劳务发票要交多少税
  • 员工服装属于什么费用类型
  • 文化事业建设费税收优惠政策2023
  • 面对通过网络涌入的大量信息,我们应该学会
  • 预提长期借款利息的会计分录怎么写
  • 营改增后装饰公司税率
  • 监理费的付款比例
  • 管理费用部分科目怎么填
  • 以前年度的收入和成本错了要怎么调
  • 企业的营业外收入要交增值税吗
  • 进货折扣是怎么计算
  • unity默认存储路径
  • wifi出现感叹号上不了网怎么办
  • hp workwise service是什么
  • vue3中使用require
  • Yii2如何批量添加数据
  • 我一定要用自己的双手拼出来
  • 金税盘干嘛用
  • 元的解释是什么?
  • 修改公司章程注意事项
  • 单位社保年底清算
  • 预付账款和预收账款哪个是负债
  • Packaging a Qt application
  • 发票无法收回会计分录
  • 深入理解jvm第三版pdf百度云
  • 预收的贷方余额表示什么
  • 小规模纳税人有哪些
  • 开办费的最新账务处理会计视野
  • 电子承兑 背书
  • 收到预付款项发票怎么开
  • 支付政协扶贫款怎么做账
  • 企业买期货账务处理
  • 视同销售要以什么顺序确定销售额?
  • 不征税发票和零税率发票
  • 计费销售额如何计税
  • 新办企业增多
  • 长期待摊费用是经营性资产吗
  • win7修改sid
  • ubuntu unity8
  • 在mac下如何安装软件
  • window8系统安装步骤
  • Linux系统SCSI磁盘扫描机制解析及命令详细介绍
  • rtos用什么语言
  • 怎样把系统及软件迁移到固态
  • linux操作系统主要用来干嘛?
  • cocos2dx4.0教程
  • js按位运算符
  • node.js net模块
  • 局域网远程开机与远程唤醒
  • html label标签的使用教程
  • 老板思维案例
  • 厂房转让的土地税怎么算
  • 请问地税是省直单位吗
  • 营改增后租金如何交税
  • 地税滞纳金如何做账
  • 企业所得税账务如何处理
  • 增值税专用发票上传是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设