位置: 编程技术 - 正文

JavaScript高级程序设计(第3版)学习笔记6 初识js对象(javascript高级程序设计pdf百度云)

编辑:rootadmin
在房子里面可以放你想放的任意事物——如果你有足够的美学造诣,你甚至可以弄一个房中房试试——当然,为了方便管理,我们会给房子里存放的所有事物都会取上一个不重复的名字,比如医药房间里的各种药品名称。在ECMAScript中,你可以在对象中存放任意你想放的数据,同样,我们需要给存放的数据取一个名字——也就是对象的属性名,再存放各种数据。再看看ECMA-中对象的定义:无序属性的集合,其属性可以包含简单数据类型值、对象或者函数。   进入对象,我开始有些激动了,说实话,让我想起做这系列学习笔记的最初原因,就是因为该书对对象的深刻论述,让我对JavaScript的认知从客户端验证小工具转变成一门强大的面向对象脚本语言,但我现在也有点犯难了,因为关于对象,有太多太多的东西需要去细化,一时也不知该从哪个点切入,比如要想深入理解对象,作用域、执行环境、闭包这些概念是肯定离不开的,但如果连对象的概念都没说就开始执行环境和闭包,又感觉像是空中楼阁。不过又一想,也就释然了,这毕竟只是自己的个人学习笔记,又不是什么教科书,我大可以使用自己喜欢的方式来做自己的笔记(事实上,在前面的篇章中,我就有意识的重复那些我认为有意思的地方,这就是我喜欢的一种方式),当然,我还是会尽量以一种易于理解的方式来做这些笔记。 对象类型   和5种简单数据类型(Undefined、Null、Boolean、Number、String)相对应,对象(Object)也是一种数据类型,只是这种数据类型比较特别,它不但可以像简单数据类型一样存取通常的数据,而且可以将动作行为作为一种特殊的数据加以存取。 1、对象实例   每种数据类型都有相应的值,比如Undefined类型只有一个值undefined,而数字5是Number类型的一个值。对于对象类型,我们把值称为对象实例,那么对象类型都可以有哪些(值)实例呢?任意一个对象都是对象类型的值(实例),比如简单类型包装对象(Boolean、Number、String)就是对象类型的值(实例)。 2、对象字面量   既然任意一个对象都是对象类型的实例,那么对象实例怎么表示呢?或者说我们在交流过程中怎么书写出对象实例呢?简单数据类型的值很好表示,比如用符号“5”表示数字5,符号“true”表示Boolean值true,这些被称为字面量,那么,有没有对象字面量呢?答案是肯定的,对象字面量就是通过一对大括号({})来表示的。比如: 这里最外层的一对大括号({})就表示这是一个对象字面量。另外,还有数组字面量的概念,在ECMAScript中,数组Array是一个继承了Object的对象实例,通过这个对象实例可以创建数组类型的实例,数组类型的实例也可以直接通过数组字面量来表示,方法如下: 这里一对中括号([])用于表示数组,这是一个包含了两个对象的数组。通过对象字面量和数组字面量,形成了难以想象的强大表现力,事实上,流行的JSON数据格式就是基于此。 3、创建对象实例   熟悉一般面向对象的朋友都知道,要创建一个类的实例,首先要定义这个类,然后用new关键字来创建这个类的实例(别和我说还可以使用反射,我的Java可学的不好……)。但是在ECMAScript中,根本没有类的概念,那么,对象实例要怎么创建呢?   在ECMAScript中尽管没有类,但是也有某种程度上类似的概念,承担这个角色的就是函数,可以通过new操作符和函数来创建对象实例——每一个对象实例都有一个用于创建这个实例的函数。最基本的函数就是Object(),它是用来创建最一般对象的函数,其它的诸如Number()函数,可以用来创建Number对象的实例,Boolean()函数,可以用来创建Boolean对象的实例: (1)可以看到,要创建一个对象实例,首先需要有一个函数(称为构造函数),这个函数使用new调用时就是创建对象实例,不使用new时只是通常意义上的函数调用(如果这个函数在内部返回实例了,函数调用也可以创建对象)。 (2)所谓的内置对象实际上也就是内置了一些创建对象实例的函数而已,不同的函数创建不同的内置对象。 (3)关于要不要使用new操作符,我的建议是使用,如果不使用new操作符,有些情况下结果会出乎你的意料之外,像上例中的第5、7行,实际上并没有创建对象,而只是普通的函数调用,这个调用的作用就是转换数据类型。 (4)使用new创建对象实例时,如果调用构造函数不需要传入参数,也可以省略后面的函数调用操作符(()),当然,这种特性也不是什么值得宣扬的事情。 (5)如果需要创建自定义对象的实例,那么首先也需要定义一个构造函数,然后使用new操作符调用创建实例。这里需要注意,如果忘了new的话,可能会污染全局环境: 要避免这种问题,可以修改一下构造函数: 这个构造函数首先判断this值是否为Person类型,如果不是,就在内部使用new调用,以确保返回的值一定是Person类型实例。这种方式使得重构构造函数成为了可能,也许Boolean()、Number()、String()在实现上就是使用了这种方式来区分是构造函数还是转换函数。如果你在调用Object()时省略new的话,结果也能返回对象,估计也是在后台做了类似处理,同样的情况还有本文后部分要讲的函数类型构造函数Function()。 (5)可能有人会问,既然有对象字面量,何必要用这么复杂的方式来创建对象实例呢,直接写对象字面量不就完了?用对象字面量创建对象实例,根本没有使用什么函数,看来,上面的“每一个对象实例都有一个用于创建这个实例的函数”的说法并不正确。   首先第一个问题,的确,可以使用对象字面量来创建函数,而且也非常简洁,这甚至也是我首先推荐的一种创建方式,但是用这种方式创建对象实例,只能创建单例的实例,对于需要创建多个相同类型的对象实例来说并不适用,然后第二个问题,用对象字面量创建对象,实际上并不是没有相应的构造函数,只是构造函数为Object(),使用对象字面量,后台可能不会去调用new Object(),但创建出的对象仍然有指向这个函数的属性,这可以从下面代码输出中得到验证: 这里的constructor是每个实例对象都有的一个属性,用于保存创建这个对象实例的函数,这就是下面要讲的。 4、对象属性和方法   每一种数据类型都有各自的共性,比如Number类型值都有可以和另外一个Number类型值相加的特性,同样,对象类型的实例也有一些相同的特性,这些特性就体现在它们都包含下面的属性和方法(方法实际上也是一种属性,只是属性的值类型是函数的话,我们也称之为方法): 类别属性/方法说明属性constructor指向用于创建当前对象的函数方法hasOwnProperty(propertyName)检查给定的属性是否在当前对象实例中propertyIsEnumerable(propertyName)检查给定的属性是否能够是使用for-in语句来枚举isPrototype(object)检查传入的对象是否是另一个对象的原型toLocalString()返回对象的字符串表示,该字符串与执行环境的地区相对应toString()返回对象的字符串表示valueOf()返回对象的字符串、数值或布尔值表示,通常与toString()方法返回值相同注:在《JavaScript高级程序设计(第3版)》第页中的Constructor将首字母大写了,应该是一个印刷错误。 属性和方法的访问有两种方式: (1)使用点号(.):如person.name。 (2)使用方括号([]):如person[name],使用这种方式,方括号内部可以是一个变量或者表达式,这使得可以访问名称包含特殊符号的属性和方法。   通过结合for-in和这里的hasOwnProperty (propertyName),我们就可以遍历对象实例自身的属性而不包括从原型链继承而来的属性了:

推荐整理分享JavaScript高级程序设计(第3版)学习笔记6 初识js对象(javascript高级程序设计pdf百度云),希望有所帮助,仅作参考,欢迎阅读内容。

JavaScript高级程序设计(第3版)学习笔记6 初识js对象(javascript高级程序设计pdf百度云)

文章相关热门搜索词:javaScript高级程序设计,javascript高级程序设计pdf下载,javascript高级程序设计第六版,javascript高级程序设计电子版,javaScript高级程序设计,javascript高级程序设计电子版,javascript高级程序设计第六版,javascript高级程序设计电子版,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript高级程序设计(第3版)学习笔记7 js函数(上) 变量类型在说函数之前,先来说说变量类型。1、变量:变量在本质上就是命名的内存空间。2、变量的数据类型:就是指变量可以存储的值的数据类型

JavaScript高级程序设计(第3版)学习笔记8 js函数(中) 6、执行环境和作用域(1)执行环境(executioncontext):所有的JavaScript代码都运行在一个执行环境中,当控制权转移至JavaScript的可执行代码时,就进入了

JavaScript高级程序设计(第3版)学习笔记9 js函数(下) 再接着看函数——具有魔幻色彩的对象。9、作为值的函数在一般的编程语言中,如果要将函数作为值来使用,需要使用类似函数指针或者代理的方式来

标签: javascript高级程序设计pdf百度云

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

上一篇:JavaScript高级程序设计(第3版)学习笔记5 js语句(javascript高级程序设计电子书)

下一篇:JavaScript高级程序设计(第3版)学习笔记7 js函数(上)(javascript高级程序设计pdf百度云)

  • 计提并结转所得税费用的会计分录
  • 税收实体法有哪18种
  • 应纳税所得额是利润总额吗
  • 国际货运代理可以开免税吗
  • 某项目全部投资资金的40%由银行贷款
  • 小规模不报税会怎么样
  • 净现值为零时的收益率
  • 小规模纳税人如何开电子发票
  • 研发费用加计扣除新税收政策2023
  • 借款转资本公积怎么算税
  • 年度结转之前需要做什么
  • 预付账款转出分录
  • 长期股权投资稀释
  • 收到预付款项发票如何入账?
  • 其他应付为负数怎么处理
  • 投资活动购建固定资产
  • 小企业准则适用范围
  • 个人劳务报酬所得汇算清缴
  • 电子银行承兑汇票有风险吗
  • 继承或赠与所得的房产
  • 普票开错了能退税吗
  • 小规模纳税人免征增值税怎么记账
  • 外汇风险怎么规避
  • 固定资产折旧转入什么科目
  • 小规模需要交所得税吗
  • 旅行社差额征税如何开票
  • 零余额账户用款额度年末转入什么科目
  • 如何在Windows 11上卸载更新
  • 无线路由器温度范围
  • 税收返还的账务处理
  • smart图形怎么单独设置动画
  • 固定资产多少可以费用化
  • Uncaught TypeError TypeError: Cannot set properties of null (setting ‘onclick‘)的解决办法
  • 采用权益法核算
  • php实现的浏览器有哪些
  • 怎么配置opencv
  • 材料成本差异的会计分录
  • 技术部周报怎么写
  • diffusion扩散模型训练时间
  • linux执行php脚本
  • 应付职工薪酬期末余额是什么意思
  • 职工福利费允许扣除比例
  • 需要做审计有哪些行业
  • 其他应付款的项目
  • mysql多表左连接查询
  • 待报解预算收入是什么
  • 金税四期上线后对个人的影响
  • 企业年有什么用
  • 包装就是包装物
  • 小型微利企业是小微企业吗
  • 收到以前年度增值税退税账务处理怎么做账
  • 应纳税额和已缴税额一样
  • 进项税已入账未认证申报表怎么填
  • 企业投资分红帐务处理?
  • 开发成本计入现金流量表
  • 一般纳税人劳务费税率是多少2023
  • 应收应付账款如何清理
  • sql server 2019自定义安装教程
  • win2003peiso
  • LINUX操作系统的主要组成部分有
  • 什么叫脚本错误
  • win8如何激活
  • xp系统如何删除用户
  • winxp如何打开控制面板
  • RPDFLchr.exe - RPDFLchr是什么进程 有什么用
  • win7系统电脑蓝牙在哪里
  • win8如何打开任务管理器
  • nodejs项目开发
  • 自动上传文件
  • em和px
  • vim如何在文件中添加
  • Node.js中的construct
  • unity shader ao
  • 深入理解新发展理念,推进供给侧结构性改革
  • js 上传
  • jquery给div添加样式
  • 临时占地耕地占用税纳税义务发生时间
  • 河源市人民医院上班时间
  • 江苏高速通行费标准
  • 余杭区税务局地址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设