`
weigang.gao
  • 浏览: 491225 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

面向对象程序设计(5)

 
阅读更多

面向对象的语言有一个标志,那就是它们都有类的概念。而通过类可以创建任意多个具有相同属性和方法的对象。前面提到过,ECMAScript中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。

 

ECMAScript-262把对象定义为:无序属性的集合,其属性可以包含基本值,对象或者函数。

严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。正因为这样,我们可以把ECMAScript的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。

每个对象都是基于一个引用类型创建的,这个引用类型可以是原生类型,也可以是开发人员定义的类型。

 

属性类型

ECMAScript中有两种属性:数据属性和访问器属性

 

1.数据属性(property的属性)

要修改属性默认的特性,必须使用ECMAScript 5Object.defineProperty()方法。这个方法接受三个参数:属性所在的对象,属性的名字和一个描述符对象。IE8ECMAScript3支持的很好,对ECMAScript5的新特性并不支持。所以如果你使用的是IE8,那么就不能是用Object.

defineProperty()方法。

 

区分:

情景1:属性name的特性configurable,enumerablewritable特性的默认值都是true。但是调用Object.defineProperty()方法时,如果不指定,configurable, enumerablewritable特性的默认值都是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.访问器属性

访问器属性不包含数据值;它们包含一个gettersetter函数(不过,这两个函数都不是必需的)。在读取访问器属性时,会调用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.读取属性的特性

使用ECMAScript5Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符。这个方法接受两个参数:属性所在的对象和要读取其描述符的属性名称。返回一个对象,如果是访问器属性,这个对象的属性有configurable,enumerable, get set;如果是数据属性,这个对象的属性有configurable, enumerable, writablevalue

<script type="text/javascript">
             var book = {year : 2010};
             var descriptor = Object.getOwnPropertyDescriptor(book, "year");
             alert(descriptor.value);
             alert(descriptor.configurable);  
</script>

 

 

 

分享到:
评论

相关推荐

    Java面向对象程序设计5.ppt

    Java面向对象程序设计5.ppt

    面向对象程序设计 c++面向对象程序设计 c++面向对象程序设计PPT课件

    面向对象程序设计 c++面向对象程序设计 c++面向对象程序设计

    面向对象程序设计—C++语言描述PDF

    《面向对象程序设计:C++语言描述(原书第2版)》内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编程方法、c++语言的各种特性、stl、c++输入/输出流、mfc等。...

    《C#面向对象程序设计》源代码(CS)

    《C#面向对象程序设计》源代码。本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发...

    面向对象程序设计—图书管理系统设计.pdf

    "面向对象程序设计—图书管理系统设计" 面向对象程序设计是当前软件开发的主流技术之一,其应用范围非常广泛,涵盖了各个行业和领域。图书管理系统是图书馆中的一种重要管理系统,它负责管理图书的存储、借阅、归还...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...

    面向对象程序设计课程设计题目

    面向对象程序设计课程设计题目 面向对象程序设计课程设计是一门旨在提高学生实际分析问题、编程和动手能力的课程设计。课程设计旨在引导学生学习掌握面向对象思想和 Java 编程语言,熟练运用 Java 工具,通过课程...

    C++面向对象程序设计教程——课件PPT

    在“C++面向对象程序设计教程——课件PPT”中,我们可以深入学习这一主题,由陈维兴和林小茶编著,清华大学出版社出版。这套教程通过一系列的PPT章节,详细讲解了C++面向对象编程的关键概念。 首先,第1章“面向...

    C++面向对象程序设计课后答案

    面向对象程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,能够较好地支持程序代码的复用。 2.面向对象程序设计语言有四个特征: ⑴ 抽象性 ---- 许多实体的共性产生类。 ⑵ ...

    c++面向对象程序设计第三版谭浩强教学大纲.pdf

    "C++面向对象程序设计第三版谭浩强教学大纲.pdf" 本资源摘要信息涵盖了C++面向对象程序设计的基本概念、数据存储、程序设计初步、函数、数组、指针、用户自定义数据类型、类和对象的程序设计等方面的知识点。 第一...

    C++面向对象程序设计 经典例题 附练习题

    本资料包“C++面向对象程序设计 经典例题 附练习题”显然是为了帮助学生深入理解C++的面向对象特性,并通过实例和练习来巩固学习成果。 在C++中,面向对象的主要概念包括: 1. **类**:类是创建对象的模板或蓝图,...

    李爱华、程磊-面向对象程序设计课后答案(完整版.docx

    李爱华、程磊-面向对象程序设计课后答案(完整版) 本资源是面向对象程序设计的课后答案,涵盖了面向对象程序设计的各种知识点,包括C++语言基础、函数、数组、指针、异常处理、类和对象、构造函数、析构函数、...

    上海交大C面向对象程序设计(全25集)

    资源名称:上海交大C 面向对象程序设计(全25集)资源目录:【】上海交大C 面向对象程序设计(01-05集)【】上海交大C 面向对象程序设计(06-10集)【】上海交大C 面向对象程序设计(11-15集)【】上海交大C 面向对象程序...

    《面向对象程序设计JAVA语言程序设计》

    《面向对象程序设计JAVA语言程序设计》 以下是从给定的文件信息中生成的相关知识点: 1. Java 语言程序设计的基础知识点: * 面向对象程序设计的概念和特点 * Java 语言的特点和优势 * Java 语言的基本结构和组成...

Global site tag (gtag.js) - Google Analytics