位置: 编程技术 - 正文

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

  • 城建税计税依据公式
  • 三证合一后纳税人识别号和信用代码一样吗
  • 小规模纳税人销售自己使用过固定资产
  • 取得虚开普票怎样补增值税
  • 母公司给子公司注资需要什么手续
  • 成本费用利润率反映什么
  • 需要冲红的普通发票无法收回怎么办
  • .申报表税源编码怎么填
  • 甲公司存货采用实际成本法核算
  • 二手车买卖如何交税
  • 特殊贸易区域怎样选择
  • 备发职工工资属于什么会计科目
  • 差旅费属于什么支出类型
  • 应交税费期初数比期末数大
  • 经营杠杆系数分类
  • 基本存款账户能向银行借款吗
  • 设备安装增值税适用税率
  • 小规模建筑业有增值税吗
  • 股权转让以前年度怎么算
  • 代缴代扣增值税
  • 防伪税控开票系统SOAP服务端
  • 自己公司开发票有什么好处
  • 进料加工料件需补税的情况
  • 房地产开发公司注册资金要求
  • 电子通行费如何开发票
  • 企业减免企业所得税怎么算
  • 我公司以房产土地为主
  • bios密码如何设置
  • 信息化投入费用包括哪些
  • 监控 固定资产
  • 什么是汇兑损益,汇兑损益产生的原因有哪些?(10分)
  • 生产经营所得个税表
  • PHP:mb_strtolower()的用法_mbstring函数
  • 在win7系统中怎样为另外一块硬盘安装系统
  • 洗牙的利和弊
  • msoxmled.exe是什么软件
  • 税收滞纳金可以抵税吗
  • php表单生成器
  • hg8321r路由
  • 深度学习之GPU显存与利用率 浅析小结
  • 记账凭证和原始凭证都是登记账簿的直接依据
  • 巴塞罗那城市布局
  • php数组分类
  • tensorflow gpu安装
  • web前端面试题2021及答案
  • ps橡皮擦怎么擦的跟背景色一样
  • 无票收入怎么做
  • element-ui tree 异步树实现勾选自动展开、指定展开、指定勾选
  • dom事件种类
  • 织梦百科
  • 租赁公司一般都有什么税
  • 织梦前台数据不能存入中文
  • 一张记账凭证写不下时合计怎么写
  • 营销策划合作协议
  • sqlserver常用命令
  • 小规模纳税人报哪些税
  • 企业注销清算报告模板
  • 将现金存入银行编制什么凭证
  • 持有至到期投资是债权投资吗
  • 事业单位对外投资
  • 个体工商户记账报税教程
  • 健全的财务会计制度承诺函
  • ubuntu怎么修改配置文件
  • centos7查看目录
  • windowssys
  • win8系统无法连接到网络
  • win10系统预览版
  • 电脑xp系统如何
  • macbook key
  • linux关闭sh
  • cocos2dx 3.5 ”hello world“解析
  • linux命令-s
  • css布局的经典网站
  • vue.js如何使用
  • 电脑安装node
  • 用python发邮件
  • 车辆保险开增值税吗
  • 缴纳车辆购置税的会计处理
  • 造纸及纸制品业属于什么行业
  • 优税猫是什么运营模式
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设