位置: 编程技术 - 正文

Javascript浅谈之引用类型(javascript详解)

编辑:rootadmin

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

2.引用类型的结构引用类型的值时由两部分构成,一是引用类型的值指代的对象的所属对象,这里我们姑且把它叫做base,二是base中的指代对象的对象名称。用伪代码来表示:

3.使用情景引用类型的使用情景有二:

(1)在处理一个标示符时

标示符是变量名,函数名,函数参数名和全局对象中未识别的属性名。

(2)在处理一个属性访问器时

在操作的中间结果中,引用类型对应

这里还是有必要解释一下base,在javascript中所有对象或者函数都有所属对象,看过我前面文章的人都知道,在每个执行上下文有个变量对象专门来管理这个执行上下文中的变量或者函数。

所以,当处理标示符时:

在全局上下文中,毋庸置疑,base === globalVO === gloabal

在函数的执行上下文中,base === VO/AO

但处理对象属性是:

这个更是简单,base === owerObject

4.获取引用类型的真正值一开始我们说了,引用类型只是一个指代,而不是它并不保存真正的值。当需要真正的值时,可以通过内部一系列算法,可以得到。这个算法,我们可以用简单的伪代码来描述:

内部的[[Get]]方法返回对象属性真正的值,包括对原型链中继承的属性分析。所有通过GetValue我们也可以轻松获取引用类型的真正的值。如下例:

那我们什么时候需要获取引用类型的真正值呢?

一般是在引用类型需要进行赋值、参与运算或者被调用是需要通过GetValue方法获取真正值。(注意:通过GetValue获取到的对象不再是引用类型)

引用类型与this的关系引用类型主要是跟函数上下文中的this指向关系密切,且不同时候看起来还差异挺大,所有我们才引出引用类型来专门解释函数上下文中this的表现。

函数上下文中确定this值的通用规则如下:

在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。如果调用括号()的左边是引用类型的值,this将设为引用类型值的base对象(base object),在其他情况下(与引用类型不同的任何其它属性),这个值为null。不过,实际不存在this的值为null的情况,因为当this的值为null的时候,其值会被隐式转换为全局对象。注:第5版的ECMAScript中,已经不强迫转换成全局变量了,而是赋值为undefined。

下面我们根据调用括号左边不同分三种情况进行讨论:

(1)调用括号左边是引用类型的值

这无需作过多分析,base对象就是this值,找到base即可。如果是全局变量下申明的,那就指向全局对象。

(2)调用括号左边是引用类型的值,不过这个值为null

当一个内部函数被调用时,这个内部函数的base应该是当前执行上下文中活动对象(OA),但是在javascript内部在OA作为base时,都当做null处理,javascript当然不允许this为null的情况发生,所有就将base设置为global对象(这是前文this函数调用模式中设计错误的源头)。所以在这情况下,this都指向全局对象。

(3)调用括号左边不是引用类型的值

当调用括号的左边不是引用类型而是其它类型,this自动设置为null,结果为全局对象。

第一个例子中,立即函数,它的函数调用小括号左边是一个表达式,不是一个引用。

第二个例子复杂了许多,我们来一个个分析:

foo.bar(),这个没有疑问,base为foo,this指向foo。

(foo.bar)(),这里用到了一个小括号,它在这起到分组符作用,也就是它不会迫使引用类型执行GetValue方法,其执行结果,跟上面一模一样。

后面三个,小括号里面依次是赋值运算、或运算和逗号运算,它们都会迫使引用类型执行GetValue方法,从而返回一个函数对象。这样,函数调用小括号左边就不再是引用类型了,所有,this都是指向全局对象的。

总结

关于引用类型,其实我都一直不太了解这个,只是看到汤姆大叔的博客中this那章,为了解释函数调用模式中this的取值原理且专门分析了一下,这一分析可不得了,我之前一直认为引用类型和引用传值应该存在某些关系,没想到,它大叔bolg中只是用来辅助理解this。至于他们二者之前有没有关系,如果有关系到底是一种什么关系,这还得我继续学习研究。

希望大家多交流。在此还是的感谢汤姆大叔.

推荐整理分享Javascript浅谈之引用类型(javascript详解),希望有所帮助,仅作参考,欢迎阅读内容。

Javascript浅谈之引用类型(javascript详解)

文章相关热门搜索词:javascript详解,javascript总结,javascript总结,javascript+,javascript+,javascriptj,javascriptz,javascript+,内容如对您有帮助,希望把文章链接给更多的朋友!

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

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

javascript中字符串的定义示例代码 htmlheadtitlejavascript中字符串的定义/titlescript//定义字符串//第一种varstr=newArray();alert(str);//空字符//第二种varstr2=newArray("hello");alert(str2);//hello//第三种/*String

标签: javascript详解

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

上一篇:Javascript浅谈之this(javascript entries)

下一篇:浅谈Javascript 执行顺序(简述javascript执行原理)

  • 房地产开发产品科目
  • 定额发票可以用旧的营业执照发票章吗
  • 个人所得税生产经营所得税率
  • 坏账准备贷方核算内容
  • 在建工程当中哪些是资产
  • 高速过路费抵扣增值税
  • 增值税预交款怎么算
  • 财税〔2017〕39号
  • 预缴企业所得税分录
  • 基金会可以投资企业吗
  • 会计准则一般选择哪个
  • 未分配利润怎么处理
  • 企业的应付账款确实无法支付,经确认后转作
  • 公司可以对公司罚款吗
  • 委托代理出口能否办理退税
  • 商铺土地增值税清算
  • 应交增值税的会计科目
  • 注册表怎么启动
  • 然后安装电脑系统
  • 中秋购物
  • 个税这个月多交了下个月减回来
  • 公司账户转账到出纳个人账户
  • 收到退回的保证金利息怎么入账
  • 进项发票抵扣途中怎么办
  • 水资源税收费标准
  • 旺阿雷自然保护区里的旺阿雷瀑布,新西兰北岛 (© Nathan Kavumbura/Getty Images)
  • 灵活就业养老保险退休后每月领多少钱
  • 利润表的营业收入是开票金额吗
  • 固定资产净残值率是多少
  • 一般纳税人开出13%的普通发票怎么扣税
  • 开源代码网站github
  • 浅谈一下新冠的好处
  • 小程序开发要钱吗
  • 增值税普通发票查询真伪
  • 材料暂估入库的依据有哪些
  • 基于sqlite特殊字符转义的实现方法
  • php网站根目录
  • 企业发生的直接进入当期损益的期间费用包括
  • 房地产城建税计税依据
  • 怎么找回丢失的华为手机
  • 公司处理旧车增值税怎么交
  • 上市公司发放现金的规定
  • 接受捐赠收入作为广告费扣除基数吗
  • 建筑企业收挂靠公司的管理费如何做账?
  • 企业收到政府专项奖励
  • 预收账款借贷方向增减
  • 农副产品免税发票可以抵扣吗?
  • 直接计入管理费用的税金有哪些
  • 缴纳上月附加税怎么做分录
  • 购买发票打印机如何账务处理?
  • 销售完一定要结工资吗
  • 小规模可以开红网吗
  • 注销公司需要多长时间完成
  • 总分类账的依据
  • 企业成立第二年有补贴吗
  • 销售空调并提供安装如何征增值税
  • sqlserver 字符串包含
  • mysql中具体到删某一个数据
  • sql server数据库怎么导出
  • sql语句 字符串
  • 如果一个sql语句中包括两个名字
  • bios设置电脑定时启动
  • mac怎么有线投屏到电视
  • Win10 64位正式版系统安装方法全过程图解(U大师)
  • firefox干啥的
  • win10激活后是什么样子
  • win7系统无法修复怎么办
  • bass表示什么
  • 人物动画声音随声而动
  • 数独算法代码c语言
  • 简介英文
  • windows如何进行批处理
  • android更新ui的方式
  • python科学计算基础教程
  • js生成excel文件
  • jquery获取点击元素
  • 个人所得税全年不到60000,单月超过
  • 小规模纳税人应交增值税账务处理
  • 江苏电子口岸卡邮寄大概需要多久
  • 企业所得税零申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设