




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象设计-引用类型(function string number array date) -Object-对象原型-函数表达式-数据类型面向对象:类和对象,通过类可以创建任意多个具有相同属性和方法的对象。ECMA定义对象:无序属性的集合,其属性可以包含基本值、对象或者函数。相当于一组没有特定顺序的值,对象的每个属性或方法都有一个名字,而每个名字映射到一个值。即:对象就是一组键值对,其中值可以是数据或函数。每个对象都是基于一个引用类型创建的。Object是所有JS对象的基类prototype是对象的原型obj.constructor是创造该对象的构造器一、创建自定义对象var person = new Object();=dujie;person.say = function()alert();字面量法:var person = name:dujie,say:function()alert();二、对象属性内部采用的特性,描述了属性的各种特征,这些特性是为了实现JavaScript引擎用的,在js中不能直接访问,为了表示特性是内部值,规范把他们放在了两对方括号里 例如:EnumerableECMAScript中有两种属性:数据属性和访问器属性1.数据属性:包含一个数据值的位置,行为(在这个位置可以读取和写入值)4个描述行为:1.Configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性或者能否把属性修改为访问器属性。默认值为true2.Enumerable:表示能否通过for-in循环返回属性,默认为true3.Writable:表示能否修改属性的值 默认为true4.Value:包含这个属性的数据值。默认为undefined,从这个位置读取或写入保存属性的值定义对象时var person=name:dujie Value特性将被设置为dujie若要修改属性默认的特性,必须使用 ECMAScript5的Object.defineProperty()方法Object.defineProperty(obj,属性名,描述符对象)描述符对象的属性必须是 configurable enumerable writable value 例如:var person = ;Object.defineProperty(person,name,writable:false, 属性值不可以修改,变成只读configurable:false 不可从对象中删除属性 delete 无效果value:dujie);alert() /=jack;alert() /dujie注意:可以多次调用Object.defineProperty()方法修改同一属性的特性,但是把configurable特性设置为false后就会有限制,除writable之外的特性都会报错原型对象模仿类,实例化对象实例化对象流程:1.创建obj = new Object()2.将obj的内部_proto_指向构造函数A的prototype属性,同时obj.constructor = A.prototype.constructor 类的实例对象的constructor属性永远指向构造函数的prototype.constructor,构造函数 person原型对象totype对象实例 person1三者的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。原型链:原型对象等于另一个类型的实例,将包含一个指向另一个原型的指针,相应地另一个原型中也包含指向另一个构造函数的指针,层层递进,构成了原型连在实例中无法访问prototype属性,可通过isPrototypeOf()方法来确定对象之间是否存在这种关系totype.isPrototypeOf(person1) /返回true 因为person1内部有一个指向totype的指针,所以返回true如果实例中的prototype指向调用isPrototypeOf()方法的对象(totype),就返回trueECMAScript 5 增加方法:Object.getPrototypeOf() 返回Prototype的值(对象原型)(IE9+ Firefox3.5 Safari5+ Opera12+ Chrome支持此方法)alert(Object.getPrototypeOf(person1)=totype); /true alert(Object.getPrototypeOf(person1).name);原型模式执行流程:读取实例属性值:1.先从对象实例开始搜索,有则返回该属性的值,没有继续根据链接搜索原型对象,最后返回原型中的属性值2.不能通过对象实例重写原型中的值,如果在实例中添加了一个与原型中具有相同名字的属性,那么就在实例中创建该属性,该属性会屏蔽原型中的属性(但不会修改原型中的属性值)解除屏蔽:即使在实例中把属性设置为null 也只会在实例中设置这个属性,而不会恢复其指向原型的链接,可以使用delete 操作符完全删除这个实例属性,让我们重新访问原型中的属性。function person()=dujie,totype.age=25,totype.say=function()console.log();var person1 =new person();var person2 =new person();=lili;console.log(); /liliconsole.log(); /dujiedelete ;console.log(); / dujieconsole.log(); /dujiehasOwnProperty()方法:检测一个属性存在于实例中还是在原型中(这个方法只在属性存在于对象实例中时才返回true)person1.hasOwnproperty(name); /实例中有返回true 无返回false通过此方法,判断访问的是实例属性还是原型属性就一清二楚了Object.getOwnPropertyDescriptor(person1,name) 只运用于实例属性,要取得原型对象属性描述符,必须直接在原型对象上调用Object.getOwnPropertyDescriptor( )方法原型于in 操作符in 操作符在单独使用时,会在通过对象能够访问给定属性时返回true 无论属性存在于实例中还是原型中person1.hasOwnProtoperty(name); /返回false 在原型中alert(name in person1) / 返回true可同时使用hasOwnProperty()方法和in 操作符,确定该属性是在原型中还是在实例中function hasPrototypeProperty(object,name)return !object.hasOwnProperty(name)&(name in object);确定属性是在原型中的属性for (i in obj):返回所有能够通过对象访问的,可枚举的属性,其中既包括存在于实例中的属性,也包括存在于原型中的属性。.取得对象中所有可枚举的实例属性,可使用Object.keys()方法,接受一个对象作为参数,返回一个包含所有可枚举的属性的字符串数组实例的话,只返回实例中的属性原型:只返回原型中的属性Object.getOwnPropertyNames(obj) 获得所有实例属性,无论是否可枚举实例的话,只返回实例中的属性原型:只返回原型中的属性为什么会指向Object?Btotype=相当于新创建了一个对象,而每创建一个函数,就会同时创建它的prototype,这个对象也会自动获取constructor属性,所以新对象的constructor重写了Box原来的constructor,因此指向新对象,新对象没有构造函数,就是默认的Object解决:原型语法简化:function Person()Ptotype=constructor:Person /确保该属性指向构造函数name:dujie,age:25,say:function();目的:简化torype的重复写弊端:constructor属性不在指向person了此种写法:相当于重写(重新定义了一个对象)了prototype对象,因此constructor属性也就变成了新的对象的constructor属性(指向Object构造函数),不再指向person函数,因此通过constructor已经无法确定对象的类型了如上:person1.constructor = person /falseperson1.constructor = Object /ture可以在重写对象时加上 constructor:Person ,但是重写会导致他的Enumerable特性设置为true,默认情况下原生的constructor属性是不可枚举的,如想兼容ECMAScript5 可以通过Object.defineProperty()设置Object.defineProperty(Ptotype,constructor,enumerable:false,value:Person)原型的声明是有先后顺序的,所以重写的原型会切断之前的原型。原型的动态性:实例中的指针仅指向原型,而不指向构造函数function Person()var friend=new Person(); /创建person实例,指向person原型Ptotype = /重写了原型对象constructor:Person,name:dujie,age:25var per=new Person();console.log(); /undefined /调用属性时发生错误,因为friend指向的原型中不包含该属性console.log(); /dujie /重写原型后实例化,具有该属性返回重写原型对象截断了现有原型于任何之前已经存在的对象实例之间的联系,他们引用的任然是最初的原型。原型对象不仅仅可以再自定义的对象的情况下使用,而ECMAScript内置对象的引用类型都可以使用这种方式,并且引用类型本身也使用了原型。原生引用类型都是这么创建的(Object Array String 等)都在其构造函数的原型上定义了方法Atotype.sortStotype.substring可以取得默认的方法,也可以定义新的方法组合使用构造函数于原型模式构造函数:定义实例属性原型模式:定义方法和共享属性function Person(name,age,job)=name;this.age=age;this.job=job;this.friend=lili,liing;Ptotype = constructor:Person,sayName:function()console.log();var person1=new Person(dujie,25,programe);var person2=new Person(limeng,25,doctor);person1.friend.push(van);console.log(person1.friend);console.log(person2.friend);console.log(person1.friend=person2.friend);console.log(person1.sayName=person2.sayName);lili, liing, vanlili, liingfalsetrue原型模式:不管你是否调用了原型中的共享方法,它都会初始化原型中的方法,并且声明一个对象时,构造函数+原型 的模式分开写不方便维护,最好把构造函数和原型封装到一起,为了解决这个问题,可使用动态原型模式动态原型模式:把所有信息都封装在构造函数中,通过在构造函数中初始化原型,又保持了同时使用构造函数与原型的优点(通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型)function Person(name,age,job)=name;this.age=age;this.job=job;if(typeof this.sayName !=function) /仅在第一次调用时初始化Ptotype.sayName = function()var friend = new Person(dujie,25,Software Engineer);friend.sayName();第一次调用构造函数时,sayName()方法不存在,然后初始化原型,第二次调用时,就不会初始化,并且第二次创建新对象,原型也不再初始化了。注意:使用动态原型模式,不可以再使用字面量的方式重写原型,因为会切断实例和原型之间的联系。二、原型连实现继承基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法构造函数 原型 实例之间的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针让原型对象等于另一个类型的实例:此时原型对象将包含另一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,上述关系依然成立,层层递进,就构成了实例于原型的链条,成为原型链。function S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 非木竹材压片工艺考核试卷及答案
- 电机转子动平衡工艺考核试卷及答案
- 重碱煅烧工抗压考核试卷及答案
- 电子电气产品环境试验检验员工艺考核试卷及答案
- 企业物资采购流程及合同管理测试卷附答案
- 2025-2026学年赣美版(2024)小学美术三年级上册(全册)教学设计(附目录P129)
- 专家合作协议
- 英国秋招面试题库及答案
- 银行助贷面试题及答案
- 银行招聘 试题及答案
- 夫妻忠诚协议书8篇
- 双重上市公司“管理层讨论与分析”披露差异:剖析与弥合
- 集装箱货物高效清关代理服务合同范本
- 2025年结构上岗试题及答案
- 教科版小学五年级上册科学实验报告20篇
- 2025-2026学年人教版(五线谱)(2024)小学音乐三年级上册教学计划及进度表
- 江西省宜春市2025年上半年事业单位公开遴选试题含答案分析
- 医院物业管理质量标准及服务流程
- DR培训考试题及答案
- 脑卒中并发吞咽障碍个案护理
- 人力资源招聘与甄选工作标准化手册
评论
0/150
提交评论