js基础进阶2-1 面向对象(类与对象介绍)

面向对象语言的要求:

一种面向对象语言需要向开发者提供四种基本能力:

  1. 封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
  2. 聚集 - 把一个对象存储在另一个对象内的能力
  3. 继承 - 由另一个类(或多个类)得来类的属性和方法的能力
  4. 多态 - 编写能以多种方法运行的函数或方法的能力

ECMAScript 支持这些要求,因此可被是看做面向对象的。

同时,面向对象的程序设计需要遵循以下5大基本原则:

  1. 单一职责原则(SRP)
  2. 开放封闭原则(OCP)
  3. 里氏替换原则(LSP)
  4. 依赖倒置原则(DIP)
  5. 接口隔离原则(ISP)

要完成一个优秀的程序设计,需要遵循面向对象设计的基本原则,也需要了解各种各样的设计模式。

从传统意义上来说,ECMAScript 并不真正具有类。事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词。ECMAScript中的一切皆对象,ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。js中的类都是由函数构造实现。

每个对象都由类定义,可以把类看做对象的配方。类不仅要定义对象的接口(interface)(开发者访问的属性和方法),还要定义对象的内部工作(使属性和方法发挥作用的代码)。

对象

ECMAScript中的一切皆是对象,且所有对象都由本地对象Object继承而来,故对象中的所有属性和方法都会出现在其他对象中,所以理解了 Object 对象,就可以更好地理解其他对象。

在 ECMAScript 中,对象由特性(attribute)构成,特性可以是原始值,也可以是引用值。如果特性存放的是函数,它将被看作对象的方法(method),否则该特性被看作对象的属性(property)。

Object 对象具有下列属性:

constructor
对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。

Prototype
对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。
Object 对象还具有几个方法:

hasOwnProperty(property)
判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty(“name”))

IsPrototypeOf(object)
判断该对象是否为另一个对象的原型。

PropertyIsEnumerable
判断给定的属性是否可以用 for…in 语句进行枚举。

ToString()
返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。

ValueOf()
返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。

注意:特别强调,constructor与Prototype及其重要,需要理解清楚。

实例

程序使用类创建对象时,生成的对象叫作类的实例(instance)。由类创建对象实例的过程叫做实例化(instantiation)。
实例化对象的过程可以理解为,由工厂产出产品的过程,即类产出实例对象。

你可能感兴趣的:(JavaScript)