什么是面向对象?
-
在《面向对象分析与设计》这本书中,Grady Booch替我们做了总结,他认为,从人类的认知角度来说,对象应该是下列事物之一:
1. 一个可以触摸或者可以看见的东西; 2. 人的智力可以理解的东西; 3. 可以指导思考或行动(进行想象或施加动作)的东西。
JavaScript 对象的特征
- 唯一标识性:内存地址
- 状态:对象具有状态,同一对象可能处于不同状态之下
- 行为:即对象的状态,可能因为它的行为产生变迁
- 动态性:JavaScript 赋予了使用者在运行时为对象添改状态和行为的能力。
- 在 JavaScript 中,将状态和行为统一抽象为“属性”
JavaScript 对象的两类属性
-
JavaScript 用一组特征(attribute)来描述属性(property)
-
数据属性(可以使用内置函数 Object.getOwnPropertyDescripter 来查看):
1. value: 就是属性的值。 2. writable: 决定属性能否被赋值。 3. enumerable: 决定 for in 能否枚举该属性。 4. configurable: 决定该属性能否被删除或者改变特征值。
-
访问器(getter / setter)属性:
1. getter: 函数或 undefined,在取属性值时被调用。 2. setter: 函数或 undefined,在设置属性值时被调用。 3. enumerable: 决定 for in 能否枚举该属性。 4. configurable: 决定该属性能否被删除或者改变特征值。
-
改变属性的特征,或者定义访问器属性,可以使用 Object.defineProperty
-
JavaScript 对象的运行时是一个“属性的集合”,属性以字符串或者 Symbol 为 key ,以数据属性特征值或者访问器属性特征值为 value。
JavaScript 的原型
-
如果所有对象都有私有字段[[prototype]],就是对象的原型。
-
读一个属性,如果对象本身没有,则会继续访问对象的原型,直到原型为空或者找到为止。
-
从 ES6 以来,JavaScript 提供了一系列内置函数,以便更为直接地访问操纵原型。三个方法分别为:
1. Object.create 根据指定的原型创建新对象,原型可以是 null; 2. Object.getPrototypeOf 获得一个对象的原型; 3. Object.setPrototypeOf 设置一个对象的原型。
JavaScript 中的对象分类
-
宿主对象(host Objects): 由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定。
-
内置对象(Built-in Objects): 由JavaScript语言提供的对象。
1. 固有对象(Intrinsic Objects ): 由标准规定,随着 JavaScript 运行时创建而自动创建的对象实例。 2. 原生对象(Native Objects): 可以由用户通过 Array、RegExp 等内置构造器或者特殊语法创建的对象。 3. 普通对象(Ordinary Objects): 由{ }语法、Object 构造器或者 class 关键字定义类创建的对象,它能够被原型继承。
网友评论