位置: 编程技术 - 正文

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百度云)

  • 放弃退税理由是什么
  • 税会差异产生的原因
  • 增值税专用发票使用规定 最新
  • 应付职工薪酬应发数
  • 视同销售填在申报表哪一栏
  • 广告公司如何开发快消客户
  • 研发投入和研发支出的关系
  • 人力费可以计入劳务费吗
  • 收到银行汇票要去银行办理吗
  • 营改增后还有企业所得税吗?
  • 定额发票什么时候失效
  • 印花税计算公式例子
  • 一般纳税人适用税种及税率
  • 已交税金怎么做账
  • 个人租房给公司开票税点
  • 免税进口种子要符合哪些条件?
  • 补缴去年个税
  • 收到投资的会计科目
  • mac打不开网页但是可以上微信
  • windows打开文件
  • 企业增资需要缴纳什么税
  • 笔记本电脑的触摸板怎么用右键
  • window最新漏洞
  • 以前年度损益调整借贷方向
  • 进项税税额抵扣
  • 期货交易所返还期货公司利息
  • win11怎么用户改名
  • php require的用法
  • php变量的基本概念
  • php的运算符主要包括哪些?
  • vue引入高德地图绘制多边形,编辑多边形
  • the模板引擎
  • 合并报表内部交易顺流逆流
  • 九斑蛾,瑞士 (© Thomas Marent/Minden Pictures)
  • 电子承兑汇票是什么时候开始的
  • 限定性收入跟非限定性收入的区别
  • 生物制品简易征收文件
  • 用流程图的形式写出视觉的形成过程
  • php图像识别
  • 帝国cms界面
  • 支租赁费用计提印花税吗
  • 小企业库存商品会计分录
  • 帝国cms如何搭建的
  • 延迟开票如何规避风险
  • 健身房注册公司能注册医疗吗?
  • 今年利润弥补以前年度亏损如何记账
  • 保税仓库税收政策
  • 房地产企业怎么预缴企业所得税
  • 车辆检验收费
  • 应交税金-应交增值税明细账
  • 并购贷款是固定资产贷款吗
  • 出售无形资产净损失
  • 网络管理费用
  • 印花税是根据什么计算的
  • 股东退股如何清算
  • 问答:分支机构是否需要设立账簿
  • 施工企业其他业务收入包括哪些
  • mysql coalesce函数用法
  • bios设置操作步骤
  • win7系统开启vt
  • win8录音文件保存在哪
  • 设置使用资源管理器查看文件时,显示已知文件的扩展名
  • windows 8.1 with update (multiple editions)
  • centos配置网络地址命令
  • linux设置权限755
  • 电脑cf截图保存在哪里
  • 高通umb
  • 删除了c盘安全组或用户
  • shell脚本用法
  • 同一个页面
  • 命令行net
  • javascript数学函数
  • 批处理中数字可以用什么代替
  • vue3.0diff
  • python怎么写多行
  • 整理的什么
  • 总分机构在同一县城企业所得税需要预交吗
  • 河南省国家税务总局发票查询系统
  • 店面转让,房租怎么交税
  • 企业支付的年度报告审计费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设