位置: 编程技术 - 正文

Javascript浅谈之this(javascript entries)

编辑:rootadmin

介绍this在各种对面对象编程中起着非常重要的作用,主要用于指向调用的对象。不过在JavaScript中,this的表现存在很大差异,特别是不同执行上下文。

由前文我们知道this也是属于执行上下文中的一个属性,所有它命中注定和执行上下文脱不了干系。

在Javascript中,this的取值取决于调用的模式。调用模式一共有四种:方法调用模式、函数调用模式、构造器调用模式和apply调用模式。

调用模式方法调用模式当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象,即方法调用模式中的this指向调用对象。这个理解起来非常容易,你是我的一个方法,你属于我,你的this当然指向我啦。

因为可以通过this访问到自己所属的对象,所有可以通过它调用和修改对象中属性或者方法。由前文可知,this作为执行上下文中属性的一员,必然是在上下文创建时才创建,所有this到对象的绑定发生在调用的时候,这属于“延迟绑定”。通过延迟绑定可以实现对this的高度复用。

上例中函数showValue就属于延迟绑定。

函数调用模式当一个函数并非作为一个对象的方法来调用,这时就是函数调用。函数调用模式中,this被绑定到全局对象。(这是语言设计上的一个错误)

按照正常思路,应该如第四行所输出那样,this指向函数所属对象,可是由于语言设计上面的问题导致this指向的却是全局对象。这个更是让this变得神秘,令人捉摸不透。但是作为开发者,这种情况肯定是我们所不愿意见到的,不按常理出牌这是,还好补救措施也很简单,就是上例中用that指代this。这样,在helper方法中调用that就可以当this使用,简单方便。至于函数调用模式为什么this会这样,后面在分析引用类型时会详加说明。

构造器调用模式由于javascript是基于原型继承,但是它的设计者又想要它能像传统的面向对象语言那样能通过new和构造函数创建对象,现实面向对象编程。这个貌似不是什么好的构想,有点画虎不成反类犬的尴尬。一是学不来,而是没必要学。javascript的原型继承机制已经非常强大,足以满足面向对象所需的继承多态。

闲话少叙,还行言归正传说说构造器调用模式。构造器调用模式这个非常简单,它就是就一个函数当做构造器,然后将你打算公用的属性和方法用this引进声明。如下

上面例子我们可以清楚看出,this是指向通过new和构造函数创建的对象。为什么会这样?这是因为在javascript中通过new调用构造函数时,new运算符调用“Person”函数的内部的[[Construct]] 方法,接着,在对象创建后,调用内部的[[Call]] 方法。 所有相同的函数“Person”都将this的值设置为新创建的对象。

apply调用模式javascript中所有函数创建之后,都会自带两个方法:apply和call。这两个方法的的具体使用,我在此就不想详细说明,不知道的同学可以百度一下,挺简单的。通过两个方法,我们可以手动设置this。虽然this在创建时候是不允许修改的,但是,我们在创建之前,手动设置过,那就是另外一回事了。这一设置,可不得了,你就可以让你的对象调用任意方法,就好像你可以让汽车大海中航行,非洲象如美洲豹一样飞驰,程序员像钢琴师一样弹奏。哈哈想象总是美好的,调用归调用,但是调用了能不能实现功能就另说了。

上面看着是不是挺有意思的,apply的第一个参数就是执行方法中的this指向。这样我们就可以借用别人的方法自己私下偷偷的用,可谓方便至极。在一些框架中经常用的此类技巧。

总结关于this就说这么多,相信大家看过之后,对在不同情境中this的判定都有些了解了,本来打算讨论接下来讨论引用对象的,阐述一下方法调用模式和函数调用模式中this取值的原理,但害怕篇幅过长,所以决定用单独一章向大家分析一下引用对象这个概念。

推荐整理分享Javascript浅谈之this(javascript entries),希望有所帮助,仅作参考,欢迎阅读内容。

Javascript浅谈之this(javascript entries)

文章相关热门搜索词:javascript entries,javascript entries,javascript definitive guide,javascript definitive guide,javascript entries,javascript definitive guide,javascript tr,javascript+,内容如对您有帮助,希望把文章链接给更多的朋友!

Javascript浅谈之引用类型 简介1.引用类型(Referencetype)引用类型是javascript中一种内部类型。它主要是当做一个指代,代替一个变量或者函数,当然在需要真实值时,又可以通过

浅谈Javascript 执行顺序 Javascript是执行顺序是至上而下的,除非你特别说明,Javascript代码不会等到页面加载完毕后才执行。比如一个网页里含有以下HTML代码:divid="ele"welcometowww.g

浅析document.ready和window.onload的区别讲解 Javascript只有在DOM元素已经定义以后才可以对其执行某种操作,这个问题在javascript执行顺序里

标签: javascript entries

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

上一篇:javascript确认框的三种使用方法(js确认框s弹出框确定和取消)

下一篇:Javascript浅谈之引用类型(javascript详解)

  • 小规模纳税人税收优惠2023
  • 企业合并债权如何处理
  • 小规模纳税人需要异地预缴吗
  • 发行股票手续费佣金计入什么科目
  • 计提工资是包含社保吗
  • 自然人城建税减半征收
  • 录入凭证需要做哪些工作
  • 出售专利权收入属于什么收入
  • 去年已支付的费用怎么查
  • 冲销无形资产如何会计分录?
  • 所得税相关分录
  • 公司拆迁安置所得的补偿款税务怎么处理
  • 销售方未抄报税的专票购买方能抵扣吗?
  • 收到个税手续费返还现金流量表
  • 劳务派遣差额征税政策
  • 企业重组 资产重组
  • 汇算清缴后需要退税如何操作?
  • 计提企业所得税的账务处理
  • 银行抵押贷款结清后需要解押吗
  • 出售长期股权投资的相关税费
  • 按揭购入固定资产怎么算
  • 冲红发票开错了怎么办
  • 固定资产更新改造替换部件怎么做账务处理
  • 打开网页时显示无法获取属性
  • win11快捷键大全
  • PQIMountSvc.exe是什么进程 PQIMountSvc进程查询
  • php $_files
  • php制作验证码
  • PHP:imagecreatefromwebp()的用法_GD库图像处理函数
  • php -v
  • pilot coat
  • ipcrm命令
  • 一次性伤残就业补助金
  • 纳税调增调减通俗易懂
  • 智能手机登陆信息怎么删除
  • 旅游门票费用可以用来报销吗?
  • 结息会计凭证怎么写
  • sql语句自动执行
  • db2获取当前年月日
  • 乡村道路属于城市道路吗
  • 外贸常用的付款方式有哪些
  • 进口货物的会计分录
  • 固定资产未转固属于什么问题
  • 部门召开会议
  • 个税新增人员工资怎么填
  • 经营一家淘宝店需要多少钱
  • 如何理解预付年金终值期数和系数和记忆方法
  • 银行日记账登记依据
  • 小规模企业与一般纳税人企业最新划分标准及税率
  • 销项发票能不能退税
  • 电子监控系统安装与维修
  • 党委经费是国家政府出吗?
  • 固定资产清理的借贷方向
  • 酒店购买的床单被罩怎么入账
  • 旅游饮食服务企业会计核算的特点
  • MySQL 与 Elasticsearch 数据不对称问题解决办法
  • win10安装mysql初始化失败原因
  • 数据库高并发怎么解决
  • ubuntu系统中如何安装WiFi驱动
  • centos7添加ip地址
  • win7系统怎么查看
  • win10阻止可能不需要的应用吗
  • linux系统bug
  • windowsxp打不开网页怎么办
  • Win8出现奇怪爆音的完美解决方法
  • win7系统屏幕保护设置禁用如何开启
  • win8开始菜单全屏怎么调回去
  • 怎么重置mysql的密码
  • ie支持es6
  • linux压缩tar文件命令
  • python的模块和包
  • linux监控程序
  • 微信jssdk vue
  • python字符串中的反斜杠
  • unity导出资源包
  • JS Timing
  • 甘肃税务局电子发票怎么开
  • 已经开具的电子专票怎么重新下载
  • 江苏 国税
  • 存款利息需要交税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设