面向对象的语言有一个标志,那就是它们都有类的概念。而通过类可以创建任意多个具有相同属性和方法的对象。前面提到过,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面向对象程序设计5.ppt
面向对象程序设计 c++面向对象程序设计 c++面向对象程序设计
《面向对象程序设计:C++语言描述(原书第2版)》内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编程方法、c++语言的各种特性、stl、c++输入/输出流、mfc等。...
《C#面向对象程序设计》源代码。本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发...
"面向对象程序设计—图书管理系统设计" 面向对象程序设计是当前软件开发的主流技术之一,其应用范围非常广泛,涵盖了各个行业和领域。图书管理系统是图书馆中的一种重要管理系统,它负责管理图书的存储、借阅、归还...
Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...
面向对象程序设计课程设计题目 面向对象程序设计课程设计是一门旨在提高学生实际分析问题、编程和动手能力的课程设计。课程设计旨在引导学生学习掌握面向对象思想和 Java 编程语言,熟练运用 Java 工具,通过课程...
在“C++面向对象程序设计教程——课件PPT”中,我们可以深入学习这一主题,由陈维兴和林小茶编著,清华大学出版社出版。这套教程通过一系列的PPT章节,详细讲解了C++面向对象编程的关键概念。 首先,第1章“面向...
面向对象程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,能够较好地支持程序代码的复用。 2.面向对象程序设计语言有四个特征: ⑴ 抽象性 ---- 许多实体的共性产生类。 ⑵ ...
"C++面向对象程序设计第三版谭浩强教学大纲.pdf" 本资源摘要信息涵盖了C++面向对象程序设计的基本概念、数据存储、程序设计初步、函数、数组、指针、用户自定义数据类型、类和对象的程序设计等方面的知识点。 第一...
本资料包“C++面向对象程序设计 经典例题 附练习题”显然是为了帮助学生深入理解C++的面向对象特性,并通过实例和练习来巩固学习成果。 在C++中,面向对象的主要概念包括: 1. **类**:类是创建对象的模板或蓝图,...
李爱华、程磊-面向对象程序设计课后答案(完整版) 本资源是面向对象程序设计的课后答案,涵盖了面向对象程序设计的各种知识点,包括C++语言基础、函数、数组、指针、异常处理、类和对象、构造函数、析构函数、...
资源名称:上海交大C 面向对象程序设计(全25集)资源目录:【】上海交大C 面向对象程序设计(01-05集)【】上海交大C 面向对象程序设计(06-10集)【】上海交大C 面向对象程序设计(11-15集)【】上海交大C 面向对象程序...
《面向对象程序设计JAVA语言程序设计》 以下是从给定的文件信息中生成的相关知识点: 1. Java 语言程序设计的基础知识点: * 面向对象程序设计的概念和特点 * Java 语言的特点和优势 * Java 语言的基本结构和组成...