位置: 编程技术 - 正文

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

  • 火车票可以抵扣多少增值税
  • 行政事业性收费票据
  • 个税申报截止日期2023年8月
  • 金融行业打包是什么意思
  • 土地使用税怎么终止
  • 销项进项怎么转化
  • 建筑企业资质使用对建造师补充要求
  • 结转预交增值税会计处理
  • 无偿赠送材料的会计处理
  • 公司长期应付账款怎么算
  • 以前年度亏损可以税前扣除吗
  • 企业代收代缴水电费出现差额怎么解释
  • 小规模纳税人跨月冲红退税
  • 个税所得期和所得税区别
  • 新的成品油消费税纳税申报表有什么变化?
  • 如何使用u盘安装win11
  • mac如何配置
  • 工资上月计提多了,这个月怎么冲
  • 坏账损失的确定原则
  • php生成文件流
  • 库存股的会计科目
  • 税务登记 申报
  • php 首字母大写
  • 公司一直没有收入怎么办
  • 跨站脚本攻击是什么
  • PHP:imagecolorsforindex()的用法_GD库图像处理函数
  • 自产的产品对外捐赠
  • 一次性劳务报酬所得如何扣税
  • java项目报错
  • 残疾人保障基金减免政策
  • pytorch训练yolov3
  • web用户管理系统报告
  • 生产加工型企业需要办理哪些
  • 所得税预缴申报表怎么填
  • phpcms安装无法连接数据库服务器
  • mysql外键约束的基本语法结构
  • 印花税补交会怎样
  • 网上更正增值税申报表
  • mysql的lsn
  • 办公室装修 会计分录
  • 金税三期税收管理系统打印控件
  • 一般纳税人收到的普票可以抵扣吗
  • 企业减少注册资本
  • 个税手续费怎么计算
  • 不带息银行汇票
  • 采购原材料怎么做分录
  • 施工总包能分包土方吗
  • 付别人押金的会计分录
  • 母公司代发子公司工资,子公司申报个税
  • 自产自销免税发票可以抵税吗
  • 诉讼代理费计入成本吗
  • 普通发票的开具是怎样?
  • 在长期股权投资中,如何理解控制、重大影响?
  • 企业如何计算增值税
  • 借用别的公司资质的协议范本
  • 自助回单打印和网银回单
  • centos6yum源
  • win8系统运行慢怎么办
  • CentOS6 32/64位安装Adobe Flash Player组件的方法
  • cool file viewer pro是什么软件
  • windowsxp查ip地址
  • centos安装教程详解
  • centos 安装chia
  • win10桌面右边没有了怎么弄出来了?
  • WIN7系统如何禁止特定软件在线升级
  • win7系统怎么把c盘的内存加到d盘
  • linux bzz
  • 动画时期
  • java程序员练手项目
  • css各种滤镜的应用是什么
  • python的linux
  • css border-bottom
  • 安卓手机wifi界面
  • androidweb view
  • service segment
  • linux shell命令大全
  • javascript零基础入门
  • 昆明地税局长是谁
  • 小规模纳税人无进项发票要如何做账?
  • ppr管材税收编码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设