欢迎来到天天文库
浏览记录
ID:37944617
大小:2.84 MB
页数:13页
时间:2019-06-03
《JS对象与原型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、面向对象设计-->引用类型(functionstringnumberarraydate)----->Object---->对象原型----->函数表达式--->数据类型面向对象:类和对象,通过类可以创建任意多个具有相同属性和方法的对象。ECMA定义对象:无序属性的集合,其属性可以包含基本值、对象或者函数。相当于一组没有特定顺序的值,对象的每个属性或方法都有一个名字,而每个名字映射到一个值。即:对象就是一组键值对,其中值可以是数据或函数。每个对象都是基于一个引用类型创建的。Object是所有JS对象的基类protot
2、ype是对象的原型obj.constructor是创造该对象的构造器一、创建自定义对象varperson=newObject();person.name="dujie";person.say=function(){alert(this.name)};字面量法:varperson={name:"dujie",say:function(){alert(this.name);}}二、对象属性内部采用的特性,描述了属性的各种特征,这些特性是为了实现JavaScript引擎用的,在js中不能直接访问,为了表示特性是内部值,规
3、范把他们放在了两对方括号里例如:[[Enumerable]]ECMAScript中有两种属性:数据属性和访问器属性1.数据属性:包含一个数据值的位置,行为(在这个位置可以读取和写入值)4个描述行为:@1.[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性或者能否把属性修改为访问器属性。默认值为true@2.[[Enumerable]]:表示能否通过for-in循环返回属性,默认为true@3.[[Writable]]:表示能否修改属性的值默认为true@4.[[V
4、alue]]:包含这个属性的数据值。默认为undefined,从这个位置读取或写入保存属性的值定义对象时varperson={name:"dujie"}[[Value]]特性将被设置为"dujie"若要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()方法Object.defineProperty(obj,"属性名",描述符对象)描述符对象的属性必须是configurableenumerablewritablevalue例如:varperson={};Object.d
5、efineProperty(person,"name",{writable:false,属性值不可以修改,变成只读configurable:false不可从对象中删除属性deleteperson.name无效果value:"dujie"});alert(person.name)//dujieperson.name="jack";alert(person.name)//dujie注意:可以多次调用Object.defineProperty()方法修改同一属性的特性,但是把configurable特性设置为false后
6、就会有限制,除writable之外的特性都会报错原型对象模仿类,实例化对象实例化对象流程:1.创建obj=newObject()2.将obj的内部__proto__指向构造函数A的prototype属性,同时obj.constructor===A.prototype.constructor类的实例对象的constructor属性永远指向构造函数的prototype.constructor,构造函数person原型对象person.prototype对象实例person1三者的关系:每个构造函数都有一个原型对象,原型
7、对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。原型链:原型对象等于另一个类型的实例,将包含一个指向另一个原型的指针,相应地另一个原型中也包含指向另一个构造函数的指针,层层递进,构成了原型连在实例中无法访问prototype属性,可通过isPrototypeOf()方法来确定对象之间是否存在这种关系person.prototype.isPrototypeOf(person1)//返回true因为person1内部有一个指向person.prototype的指针,所以返回true如果实例中的
8、prototype指向调用isPrototypeOf()方法的对象(person.prototype),就返回trueECMAScript5增加方法:Object.getPrototypeOf()返回[[Prototype]]的值(对象原型)(IE9+Firefox3.5Safari5+Opera12+Chrome支持此方法)alert(Object.get
此文档下载收益归作者所有