位置: 编程技术 - 正文

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数据结构与算法)

  • 土地增值税会计核算
  • 吊车租赁有限公司
  • 增值税的税目有哪些类型
  • 分公司不独立核算怎么做账
  • 销户之后可以重新申请吗
  • 暂时性差异乘以税率
  • 法院退诉讼费账务处理
  • 公司办公室收到上级主管部门的一份
  • 职工个人代扣款如何做账
  • 非独立核算的分公司是法人主体吗
  • 简易计税的应交所得税
  • 新版增值税开票软件怎么下载
  • 所得税汇算清缴补税的会计处理
  • 工资五险一金和税怎么处理
  • 房屋修缮发票能补开吗
  • 出售废旧物资可以开专票吗
  • 我的初级备考经验--付出才有回报
  • 住房公积金是福利费吗
  • 新版Win10中,如何仅修改部分文本大小
  • 如何备份计算机的注册表
  • 发票未到先付款的账务处理
  • 摊余成本等于什么
  • PHP:pg_unescape_bytea()的用法_PostgreSQL函数
  • 公司作为股东有什么好处
  • linux动态扩容
  • dat文件转换成wps表格
  • 存货按实际成本计价是指每种存货的收发结存
  • php实现和工作原理
  • php @method
  • vue解决异步取值问题
  • test指令怎么用
  • 深究Python中的asyncio库-线程池
  • 企业销售旧固定资产税票开票
  • 增值税收范围
  • 本期应纳税额减征额怎么算
  • 交易所转交易所手续费是多少
  • 申报水利基金的流程
  • 设计模式模板方法和策略模式对比
  • 应收账款让售会计怎么做
  • 事业单位的账务处理要分预算会计和财务会计吗
  • 员工差旅费报销会计分录
  • 工会费的会计分录是什么
  • 发票退票和废票的区别
  • 个体户开出的增值税发票丢失了怎么办?
  • 残疾人就业保障金会计分录怎么做
  • 只有劳务报酬 能否扣5000
  • 残保金是计入管理费用还是?
  • 生产企业的模具费用计入什么科目
  • 外购货物用于促销的账务处理
  • 施工企业机械租赁费用
  • 生产成本人工费结转
  • 建筑业负数发票不填工程名称和地址可以吗
  • 利润表中管理费用根据什么填
  • 预支款怎么做现金账
  • 存储过程mysql
  • mysql隐式类型转换规则
  • win7卸载KB2952664/KB3035583补丁的详细图文教程
  • 修改远程桌面端口后,远程桌面连不上
  • wlms.exe是什么
  • 硬盘安装xp系统安装教程
  • linux中的ls命令的功能是变换工作目录到目标指定目录
  • linux7修改ssh端口
  • ubuntu 14.04.6
  • 华硕和联想笔记本电脑哪个好点
  • win10系统自带浏览器在哪里
  • iptables centos
  • 彻底删除怎样恢复
  • accessviolation怎么解决
  • jquery 获取json的key
  • python爬虫介绍
  • JavaScript中的this指向
  • python3网络编程
  • 税控盘如何查询上报汇总成功
  • 被标记为广告推销的电话能接吗
  • 河北省国家税务总局云办税厅
  • 企业注销认缴与实缴是否还有风险
  • 江苏网上税务局官网登录
  • 建筑增值税税率历次调整
  • 财务负责人变更了之后还有影响吗
  • 地税局基层职位怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设