6面向对象的程序设计

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

6.1理解对象

特性(attribute)是内部值,描述了属性(property)的各种特性。ECMAScript中有两种属性:数据属性和访问器属性。数据属性包含一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个描述其行为的特性,[[Configurable]],[[Enumerable]],[[Writable]],[[Value]].要改变属性默认的特性,必须使用ECMAScript5的Object.defineProperty()方法,这个方法接收3个参数:属性所在的对象、属性的名字和一个描述符对象,一旦把属性定义为不可配置的,就不能再把它变回可配置了。访问器属性不包含数据值,它们包含一对getter和setter函数,访问器属性有4个特性:[[Configurable]],[[Enumerable]],[[Get]],[[Set]].

Object.defineProperties()方法可以一次定义多个属性。

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

6.2创建对象

工厂模式用函数来封装以特定接口创建对象的细节。工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。

使用构造函数模式可以定义自定义对象类型的属性和方法。按照惯例,构造函数始终都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头。创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型,而这正是构造函数模式胜过工厂模式的地方。构造函数与其他函数的唯一区别,就在于调用它们的方式不同,任何函数,只要通过new操作符来调用,那它就可以作为构造函数。使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一遍。

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含由特定类型的所有实例共享的属性和方法。使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法。与构造函数模式不同的是,新对象的这些属性和方法是由所有实例共享的。只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。连接存在于实例和构造函数的原型对象之间,而不是存在于实例和构造函数之间。Object.getPrototypeOf()方法返回[[Prototype]]的值。可以通过对象实例访问保存在原型中的值,但却不能通过对象实例重写原型中的值,当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性,使用delete操作符则可以完全删除实例属性,从而让我们能够重新访问原型中的属性。使用hasOwnProperty()方法可以检测一个属性是否存在于实例中,还是存在于原型中(在对象实例中,才会返回true)。有两种方式使用in操作符:单独使用和在for-in循环中使用。单独使用时,in操作符会通过对象能够访问给定属性是返回true,不论该属性存在于实例中还是原型中。在使用for-in循环时,返回的是所有能够通过对象访问、可枚举的(enumerated)属性,其中即包括存在于实例中的属性,也包括存在于原型中的属性。Object.keys()方法可以取得对象上所有可枚举的实例属性。Object.getOwnPropertyNames()方法可以得到所有实例属性,无论是否可枚举。用对象字面量来重写原型对象,constructor属性也就变成了新对象的constructor属性(指向Object构造函数),不再指向Person函数。重写原型对象切断了现有原型与任何之前已经存在的对象实例之间的联系。原型模式省略了为构造函数传递初始化参数这一环节,结果所有实例在默认情况下都取得相同的属性值,原型模型最大问题是由其共享的本性多导致的。

创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式,构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。

时间: 2024-08-01 22:47:24

6面向对象的程序设计的相关文章

第十篇 面向对象的程序设计

第十篇 面向对象的程序设计 阅读目录 一 面向对象的程序设计的由来 二 什么是面向对象的程序设计及为什么要有它 三 类和对象 3.1 什么是对象,什么是类 3.2 类相关知识 3.3 对象相关知识 3.4 对象之间的交互 3.5 类名称空间与对象/实例名称空间 3.6 小结 四 继承与派生 4.1 什么是继承 4.2 继承与抽象(先抽象再继承) 4.3 继承与重用性 4.4 组合与重用性 4.5 接口与归一化设计 4.6 抽象类 4.7 继承实现的原理(继承顺序) 4.8 子类中调用父类方法 五

走入计算机的第二十八天(面向对象的程序设计)

一  什么是面向对象的程序设计及为什么要有它 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程序的复杂度 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的程序设计的核心是

面向对象的程序设计:Object-oriented programming

在面向对象的程序设计(英语:Object-oriented programming,缩写:OOP)中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象. 在现实世界里我们所面对的事情都是对象,如计算机.电视机.自行车等. 对象的主要三个特性: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型. 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同. 比如 Animal(动物) 是一

python之面向对象的程序设计

第一:程序设计思想与发展历程(了解) 1940年以前:面向机器编程最早的是采用机器语言编程,也就是直接使用二进制码来表示机器能够识别的指令和数据.优点:机器语言由机器直接执行,速度快缺点:写起来非常困难,并且不容易修改 汇编语言:用助记符号代替机器指令的操作码,用地址符号或者标号代替指令或操作数的地址优点:比机器语言的二进制码编写方便些缺点:汇编语言本质上还是一种面向机器的语言,编写困难,易出错 脱离机器后:面向过程编程面向过程的结构化程序设计强调功能的抽象和程序的模块化, 它将解决问题的过程看

JavaScript 面向对象的程序设计记录笔记2(设计模式)

以下为JavaScript高级程序设计 第六章面向对象的程序设计6.2节 创建对象(设计模式部分)读书记录. 1)工厂模式: function createPerson(name, age, sex) { var o = new Obejct(); o.age = age; o.sex = sex; o.name = name; return o; } var person = createPerson('Tom', 12, 'male'); var person = createPerson(

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

1.面向对象的程序设计的核心思想是数据抽象.动态绑定和继承. 继承:根部称作基类,继承得来的类称作派生类.派生类必须通过使用派生类列表来明确指出它是从哪个基类继承而来的,列表形式是一个冒号,后面紧跟逗号分隔的基类列表.基类可将函数声明成虚函数来让派生类定义自己的版本. 动态绑定:动态绑定指的是在运行时才知道函数的运行版本,因此我们在使用基类的引用(或指针)调用一个虚函数时会发生动态绑定. 2.定义基类和派生类 a.基类通常该定义一个虚析构函数: b.成员函数如果没被声明为虚函数,其解析过程发生在

JavaScript 面向对象的程序设计记录笔记

以下为JavaScript高级程序设计第六章面向对象的程序设计读书笔记记录. 对象存在两个属性: 数据属性/ 访问器属性. 数据属性包括四个值: Configurable: 默认值为true, 表示能否通过delete删除属性重新定义:能否修改属性特性,或者能否吧属性修改为访问器属性. Enumable:  表示能否通过for in循环返回属性.默认值为true. writable: 表示能否修改属性,默认值为true. Value:包含这个属性的数据值. 访问器属性包括四个值:Configur

Python进阶---面向对象的程序设计思想(一)

thon的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程序的复杂度 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的程序设计的核

python基础----面向对象的程序设计

面向对象的软件开发有如下几个阶段: 1.面向对象分析(object oriented analysis ,OOA) 2 面向对象设计(object oriented design,OOD) 3 面向对象编程(object oriented programming,OOP) 4 面向对象测试(object oriented test,OOT) 5 面向对象维护(object oriendted soft maintenance,OOSM) 1 #对象:学校----->归类 2 #共有的特征:商标为

js面向对象的程序设计笔记

chap6:面向对象的程序设计 面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.前面提到过,ECMAScript 中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同.ECMA-262 把对象定义为: “无序属性的集合, 其属性可以包含基本值. 对象或者函数. ” 严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到一个值.正因为这样(以及其他将要