第六章-面向对象的程序设计(理解对象)

ESMA把对象定义为:“无序属性的集合,其属性可以包含基本值,对象和函数”。严格的讲,这相当于说对象是一组没有特定顺序的值,对象的每个属性或方法都有一个名字,而每一个名字都映射到一个值。

1.理解对象

创建对象有对象字面量的方法,这种方法比较常用,也是比较推荐的。

1 var person ={
2            name:‘xu‘,
3            age:27,
4            sayName:function(){
5                  alert(this.name);
6               }
7         };

还有创建对象的实例的方法:

2.属性的类型

     

属性有两种类型:数据属性和访问器属性。

数据属性包含一个数据值的位置,在这个位置可以读取和写入值。数据属性有四个描述其行为的特性:

要修改默认属性的特性,必须使用ECMASript5的Object.defineProperty()方法,这个方法收三个参数:属性所在的对象,属性的名字和一个描述符对象。描述符对象的属性就是上面所说的四个特性。

访问器属性

访问器属性不包含数据值,包含一对getter和setter函数(这两个函数不是必须的),在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数,并传入新值,这个函数负责决定如何处理数据。访问器有四个特性。

访问器属性不能直接定义,必须使用Object.defineProperty()方法来定义。

不一定同时指定getter和setter。只指定getter意味着属性不能写,尝试写入属性会被忽略,严格模式下,尝试写入只指定了getter函数的属性会抛出错误。类似的,只指定setter属性的函数也不能读,否则在非严格模式下会返回undefined,严格模式下会抛出错误。

3.定义多个属性

定义多个属性的时候,ES5定义了新的方法Object.defineProperties()方法。利用这个方法,可以通过描述符一次定义多个属性。它接收两个对象参数:第一个对象是要添加和修改其属性的对象,第二个对象的属性和第一个对象中要添加或修改的属性一一对应。

4读取属性的特性

使用ES5中的Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符,这个方法接受两个参数:属性所在的对象,和要读取描述符的属性名称。

如上面的例子,可以得到:

时间: 2024-11-03 21:36:39

第六章-面向对象的程序设计(理解对象)的相关文章

第六章 面向对象的程序设计 (1 理解对象)

面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象. ECMA-262 把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数."严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到一个值.正因为这样,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 每个对象都是基于一个引用类型创建的. 6

面向对象的程序设计-理解对象

理解对象 创建自定义对象的最简单方式就是创建一个Object的实例,然后再为它添加属性和方法 1 var person = new Object(); 2 person.name = "Nicholas"; 3 person.age = 29; 4 person.job = "SoftWare Engineer"; 5 person.sayName = function(){ 6 alert(this.name); 7 }; 创建对象的首选模式是对象字面量方式 1

JavaScript高级程序设计(第三版)第六章 面向对象的程序设计

6.1 理解对象 var person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"; person.sayName = function(){ alert(this.name); }; person.sayName(); 6.1.1 属性类型 1.数据属性 [[Configurable]]:表示能否通过delete删除属性从而重

第六章 面向对象的程序设计 (2 创建对象)

6.2 创建对象 6.2.1 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节. function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(thi

第六章 面向对象的程序设计 (3 继承)

6.3 继承 许多OO 语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在ECMAScript 中无法实现接口继承.ECMAScript 只支持实现继承,而且其实现继承主要是依靠原型链来实现的. 6.3.1 原型链 ECMAScript 中描述了原型链的概念,并将原型链作为实现继承的主要方法.其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.简单回顾一下构造函数.原型和实例的关系:每个构造函数都有一个原型

第六章-面向对象的程序设计—创建对象

使用对象字面量和或者构造函数都可以创建对象,但是都有缺点:使用同一个借口创建对象,会导致代码重复.为解决这个问题,人们开始使用工厂模式. 1 工厂模式 1 function create(name,age,job){ 2 var o = new Object(); 3 o.name = name; 4 o.age = age; 5 o.sayName = function(){ 6 alert(this.name); 7 } 8 } 9 var person1 = create('XU',27)

JavaScript高级程序设计-第六章面向对象的程序设计

创建对象主要的两种形式,创建Object实例和创建对象字面量 对象包含属性和方法 数据 .属性有四个特性,特性是为了描述属性行为的,他们是: Configurable(可配置的)是否能删除或是否能修改为访问器属性 Enumerable(枚举)是否能够for-in Writeable(可写)能否修改属性值 Value(值)默认为undefined,从这个位置上读数据或把新值保存到这个位置上 eg: var person = {}'; Object.defineproperty(person,"na

读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计

EcmaScript有两种属性 数据属性 和 访问器属性 数据属性有4个特性 Configurable Enumerable Writable Value 前三个值的默认值都为false 举例 Object.defineProperty( person, "name", { writable:false, value:"niko"} ) ; 一旦属性定义为不可配置的,就不能再把它变回可配置的了 读取属性 的特性 var descriptor  = Object.ge

第六章 面向对象的程序设计

属性类型 1.数据属性特性 [[Configurable]](可配置):能否通过delete删除属性重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性. [[Enumerable]](可枚举):能否通过for-in循环返回属性. [[Writable]](可写):能否修改属性的值. [[Value]](值):包含这个属性的数据值.读写属性值都再这,默认为undefined. 修改属性默认的特性,必须使用Object.defineProperty()方法. Object.define