面向对象的语言有一个标志,那就是它们都有类的概念。而通过类可以创建任意多个具有相同属性和方法的对象。前面提到过,ECMAScript中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。
ECMAScript-262把对象定义为:”无序属性的集合,其属性可以包含基本值,对象或者函数。”
严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。正因为这样,我们可以把ECMAScript的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。
每个对象都是基于一个引用类型创建的,这个引用类型可以是原生类型,也可以是开发人员定义的类型。
属性类型
ECMAScript中有两种属性:数据属性和访问器属性
1.数据属性(property的属性)
要修改属性默认的特性,必须使用ECMAScript 5的Object.defineProperty()方法。这个方法接受三个参数:属性所在的对象,属性的名字和一个描述符对象。IE8对ECMAScript3支持的很好,对ECMAScript5的新特性并不支持。所以如果你使用的是IE8,那么就不能是用Object.
defineProperty()方法。
区分:
情景1:属性name的特性configurable,enumerable和writable特性的默认值都是true。但是调用Object.defineProperty()方法时,如果不指定,configurable, enumerable和writable特性的默认值都是false
<script type="text/javascript"> var person = {name : '高红成'}; alert(person.name);//高红成 delete(person.name); alert(person.name);//undefined </script>
情景2:
<script type="text/javascript"> var person = {name : '高红成'}; Object.defineProperty(person,”name”, {}); alert(person.name);//高红成 delete(person.name);//因为configurable为false alert(person.name);//高红成 </script>
2.访问器属性
访问器属性不包含数据值;它们包含一个getter和setter函数(不过,这两个函数都不是必需的)。在读取访问器属性时,会调用getter函数,这个函数负责返回有效值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据。
访问器属性不能直接定义,必须使用Object.defineProperty()来定义。看下面的例子。
script type="text/javascript"> var book = { _year : 2004,/*_year前面的下划线是一种常用的标记,下划线必须,用于表示只能通过对象方法访问属性*/ edition : 1 }; /*在IE9+中使用Object.defineProperty(), 在IE8-中使用book.__defineSetter__(“year”, {})和book.__defineGetter__(),eg: var book = { _year : 2001}; book.__defineSetter__('year',function(newvalue){ if(newvalue > 2004){ this._year = newvalue; this.edition += newvalue - 2004; } }); */ Object.defineProperty( book, "year", { set : function(newvalue){ if(newvalue > 2004){ this._year = newvalue; this.edition = newvalue - 2004; } }, get : function(){ return this._year; } }); book.year = 2012;//year前面不需要加下划线”_”,这样会调用访问器方法来设置值 alert(book.year); alert(book.edition); </script>
3.读取属性的特性
使用ECMAScript5的Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符。这个方法接受两个参数:属性所在的对象和要读取其描述符的属性名称。返回一个对象,如果是访问器属性,这个对象的属性有configurable,enumerable, get 和set;如果是数据属性,这个对象的属性有configurable, enumerable, writable和value。
<script type="text/javascript"> var book = {year : 2010}; var descriptor = Object.getOwnPropertyDescriptor(book, "year"); alert(descriptor.value); alert(descriptor.configurable); </script>
相关推荐
习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢...
Java面向对象程序设计5.ppt
面向对象程序设计 c++面向对象程序设计 c++面向对象程序设计
面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文...
面向对象程序设计与VC程序设计入门 C++基本概念
面向对象程序设计 廖裕青 面向对象的软件开发
《面向对象程序设计JAVA语言程序设计》《面向对象程序设计JAVA语言程序设计》《面向对象程序设计JAVA语言程序设计》《面向对象程序设计JAVA语言程序设计》《面向对象程序设计JAVA语言程序设计》
面向对象程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,能够较好地支持程序代码的复用。 2.面向对象程序设计语言有四个特征: ⑴ 抽象性 ---- 许多实体的共性产生类。 ⑵ ...
《C#面向对象程序设计》源代码。本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发...
很好的一套面向对象程序设计C++期末考试,适合于大学程序设计的各种考试复习
熟悉面向对象程序设计的机制和设计方法,为进一步学习面向对象的Java语言奠定基础 为学习VC++ Windows编程作好准备 进一步熟练C/C++编程技术,为学习《数据结构》、《操作系统》等课程打好编程的基础。
谭浩强一直以来的风格,浅显易懂,面向对象程序设计!
Java,面向对象程序设计,作者孙卫琴,pdf
资源名称:上海交大C 面向对象程序设计(全25集)资源目录:【】上海交大C 面向对象程序设计(01-05集)【】上海交大C 面向对象程序设计(06-10集)【】上海交大C 面向对象程序设计(11-15集)【】上海交大C 面向对象程序...
面向对象程序设计形成性考核册答案
面向对象程序设计课程设计题目面向对象程序设计课程设计题目面向对象程序设计课程设计题目面向对象程序设计课程设计题目面向对象程序设计课程设计题目
该文件是谭浩强《谭浩强 C++面向对象程序设计》电子扫描版,高清
《Java面向对象程序设计》和《Java面向对象程序设计习题解答与实验》,使用超星阅读器浏览,仅供学习和参考使用。
资源名称:西安交通大学《面向对象程序设计》课程视频(36集)资源目录:【】西安交通大学面向对象程序设计(1)【】西安交通大学面向对象程序设计(10)【】西安交通大学面向对象程序设计(11)【】西安交通大学面向对象...
《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)...