位置: 编程技术 - 正文

解析JavaScript面向对象概念中的Object类型与作用域(java 解析javascript)

编辑:rootadmin

推荐整理分享解析JavaScript面向对象概念中的Object类型与作用域(java 解析javascript),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:用js解析第三方网站html,js解析[object object],js解析过程,javascript解析json,js解析机制,js解析过程,js解析jwt,js解析jwt,内容如对您有帮助,希望把文章链接给更多的朋友!

引用类型

引用类型主要包括:Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型等等。

引用类型使用时,需要从它们身上生成一个对象(实例)。也就是说,引用类型相当于一个模版,当我们想要用某个引用类型的时候,就需要用这个模版来生成一个对象来使用,所以引用类型有时候也称作对象定义。

例如,我们需要生成一个 person 对象,来定义某人的个人信息和行为,那么我们就需要依赖 Object 类型:

上面的这个 person 对象,通过 new 操作符使用 Object 类型这个“模版”定义。之后就可以对这个对象添加属性 name 和方法 sayName 了。属性和方法是 Object 类型具有的“功能”,所以通过 Object 等引用类型创建的对象就可以用这个了。

创建对象不一定非得需要用 new 操作符,有一些类型可以简化的创建,例如创建一个上面那样的 Object 类型的对象,也可以使用下面两种方法:

{}操作符的功能就跟 new Object() 一样,简化了操作。上面两种写法也有一些区别,第一种是“追加”,也就是在之前的定义中,继续添加属性或者方法,如果之前已经存在了同名属性方法,则会覆盖。而第二种是“取代”,就是不管前面是否定义 person 对象的属性和方法,这个方法会用新定义的内容,整个替换掉之前定义的。因为引用类型生成的对象,是储存在内存中的一块区域,然后将其指针保存在某变量中(person),第二种写法,是生成了一个新对象(新内存区域),然后将 person 变量指向了新内存区域,所以就把之前的取代了。了解这一点对后面理解,至关重要。

其他引用类型的用法大致一致,例如 Array 类型,也可以用 [] 来生成对象,或者直接定义。生成数组对象之后,就可以按照数组的格式存储信息内容,此外对象会得到 Array 类型中定义的那些方法,例如 push、shift、sort 等等,就可以调用这些方法,例如:

上面代码就是通过 Array 类型创建一个数组类型的对象,然后调用 Array 类型里面之前定义的 push 方法,向对象里面添加了 red 和 green 两个值,最后在控制台打印出来,就可以看到了。

call 和 apply 方法

这两个方法是 Function 类型提供的,也就是说,可以在函数上面使用。call 和 apply 方法的功能一样,就是可以扩充函数运行的作用域,区别就在于使用 call 的时候,传递给函数的参数必须逐个列举出来,而 apply 方法却不用。这样可以根据自己函数的要求来决定使用 call 或者 apply。

扩充函数运行的作用域是什么意思?举个例子你就明白了。

你可以这样理解,函数被包裹在一个容器(作用域)里面,在这个容器里面存在一些变量或者其他东西,当函数运行,调用这些变量等,就会在当前容器里面找这个东西。这个容器其实外面还包裹了一个更大的容器,如果当前小容器没有的话,函数会到更大的容器里面寻找,依次类推,一直找到最大的容器 window 对象。但是如果函数在当前小容器里面运行的时候,小容器里面有对应变量等,即便是大容器里面也有,函数还是会调用自己容器里面的。

解析JavaScript面向对象概念中的Object类型与作用域(java 解析javascript)

而 call 和 apply 方法,就是解决这个问题,突破容器的限制。就前面例子:

打开 Chrome 的 Console 之后,粘贴进去执行一下,之后再执行 person.sayName() 可以看到

这时候,person 就是一个容器,其中创建了一个 sayName 方法(函数),执行的时候,必须在 person 作用域下面执行。当在最下面直接执行的时候,也就是在 window 的作用域下面执行会报错 not defined,因为 window 下面没有定义 sayName 方法。而里面的 this 指针,是一个比较特殊的东西,它指向当前作用域,this.name 的意思,就是调用当前作用域下面的 name 值。

下面我们为 window 对象添加一个 name 属性:

或者直接

因为 window 是最大的容器,所以 window 可以省略掉,所有定义的属性或者变量,都挂靠到 window 上面去了,不信可以看:

那现在我们就想在 window 这个大容器下面,运行 person 小容器里面的 sayName 方法,就需要用 call 或 apply 来扩充 sayName 方法的作用域。执行下面语句:

或者

输出的结果都是一样的,你也可以换用 apply 看看效果,因为这个 demo 太简单的,不需要传递参数,所以 call 和 apply 功能效果就完全一致了。

解释一下上面代码,sayName 首先是 Function 类型的实例,也就具有了 call 方法和 apply 方法,call 和 apply 方法既然是 Function 类型的方法,所以就需要用这种方式调用 person.sayName.call(window) 而不是什么 person.sayName().call(window) 之类的。

然后 call 和 apply 方法的参数,就是一个作用域(对象),表示将前面的函数在传递进去的作用域下面运行。将 window 这对象传递进去之后,sayName 方法中的 this.name 指向的就是 window.name,于是就扩充了作用域。

为什么传递 window 和 this 都是一样的效果?因为我们当前执行这个函数的位置是 window,前面说过 this 指针指向的是当前作用域,所以 this 指向的就是 window,所以就等于 window。

JS创建事件的三种方法(实例代码) 1.普通的定义方式inputtype="button"name="Button"value="确定"onclick="Sfont=prompt('请在文本框中输入红色','红色','提示框');if(Sfont=='红色'){form1.style.fontFamily='黑体';for

全面理解JavaScript中的闭包 引子闭包是有权访问另一个函数作用域中的变量的函数。闭包是javascript中很难理解的部分,很多高级的应用都依靠闭包来实现的,我们先来看下面的一

浅析JS操作DOM的一些常用方法 getElementById():获取有指定惟一ID属性值文档中的元素getElementsByName(name):返回的是数组getElementsByTagName():返回具有指定标签名的元素子元素集合getAttribute():

标签: java 解析javascript

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

上一篇:JavaScript中的原型prototype完全解析(如何理解js中的原型)

下一篇:JS创建事件的三种方法(实例代码)(js中事件的三要素)

  • 增值税留存比例50
  • 股权转让主要交什么税
  • 劳务报酬能不能按照计件计算
  • 对公账户给私人转账手续费
  • 建行网银转账复核流程
  • 核定征收生产经营所得税率
  • 应交税费附加税期末有余额吗
  • 金税三期房产税更正申报怎么弄
  • 金税三期的内容
  • 个人开劳务发票几个点
  • 如何区分劳务派遣和劳动合同
  • 年报填写中,认缴出资时间怎么填?
  • 何时进行文化事业建设
  • 土地增值税计税依据
  • 金蝶哪个版本最好
  • 固定资产用于免税项目 进项税处理
  • 补缴的增值税可以计入以前年度损益调整
  • 自建自用建筑物,其自建行为不是建筑业税目的征税范围
  • 技术服务收入和产品服务收入举个例子
  • 在建工程产生废料收入的账务处理?
  • 关闭guest账户
  • 王者荣耀如何充值退款
  • 经营负债是指什么
  • 专项资金支出时能直接转出吗
  • windows10激活密钥免费2023
  • 转出未交增值税借方余额表示什么
  • 工作完工结算是什么意思
  • hptlbxfx.exe
  • 残疾人在公司上班公司有什么好处
  • 坏账准备的会计准则规定
  • 长期借款的会计处理例题
  • 外请培训老师的路费谁承担
  • windowlocation用法
  • 拿到领料单如何做账
  • 财务费用汇兑损失是什么
  • 红字信息表重复了怎么办
  • 总结帝国cms内容是什么
  • 普通收据能入账嘛
  • 修改账本
  • 工会经费申报的计税比率是
  • 样品开发计划
  • 个人所得税申请退税多久能到账
  • 房地产按揭贷款政策
  • 货物已到发票未到怎么做账
  • 已收款未开票未发货能确认收入吗
  • 电子凭证用不了
  • 个人的钱转到公司账上
  • 哪些计入研发费用
  • 为什么对子公司控股比例降到49%
  • 总公司中标分公司结算可以吗
  • 会计忘记申报税款会有什么影响
  • 美国支票名字不一致
  • 制造费用和生产成本影响营业利润吗
  • sqlserver比较日期时间
  • win7如何给电脑硬盘加密
  • freebsd操作命令
  • windows无法安装所需的文件,请确保所需的所有文件可用
  • win10系统回收站在哪
  • 360误删文件恢复怎么恢复
  • igfxem是什么软件
  • win7通知区域图标无法设置
  • win7系统无线网络
  • 建立一个新用户并把它加入wheel组,设置用户密码为123
  • 禁用强制驱动程序签名有什么用
  • 关于session的用法哪些是错误的
  • css行与行之间的间距怎么调
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • android studio打包jar文件
  • cmd更改文件属性
  • 特征提取技术
  • java深入理解
  • node转go
  • jQuery+PHP+MySQL实现无限级联下拉框效果
  • android 标签页
  • javascript对象的常用方法
  • python字符串的用法
  • 税控盘托管给百旺的弊端
  • 广东税务待遇
  • 即征即退的留抵税额是否可以抵一般计税的税额
  • 军人残疾证家属享受待遇吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设