一、面向对象编程
1、面向过程vs面向对象
问题:如果把大象装进冰箱,需要几步?
面向过程:(1)打开冰箱门; (2)把大象装进去(3)关上冰箱门
面向对象就是分析出解决问题所需要的步骤,然后用函数把这些步骤———实现,使用的时候依次调用就可以了。所以面向过程其实描述的是一个个“动作”
面向对象:(1)大象(2)冰箱
面向对象跟面向过程不同,面向对象则是把构成问题的事务按照一定规划分为多个独立对象,然后通过调用对象的方法来解决这个问题。所以,面向对象其实描述的是一个个“物体”
2、什么是面向对象编程
面向对象是一种符合人类思维习惯的编程思想。比如中国的四大发明之一的活字印刷术。(印刷术可以看成是面向过程;活字印刷术可以比做是面向对象。)面向对象的思想是一种通用的思想,并非只有编程中能用,任何事情都可以用这种思想远远超出了编程的范畴。
二、类与对象
面向对象的编程思想,能够让程序中的事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想提出两个概念:类与对象。
-
什么是类
类(class)是对象的模板,定义了同一组对象共有的(特征)属性和(行为)方法。
-
什么是对象
对象(object)是根据类这个模板创建出来的。
-
类与对象的关系
类是对象的抽象,而对象是类的具体实例。
**思考:是先有类,还是先有对象?**毫无疑问,肯定是先有类,再有对象。
-
面向对象的三大基本特征
- 封装
- 继承:继承主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类(父类)的情况下,对原有类的功能进行扩展。继承不仅增强了代码的复用性、提高开发效率,还可以增强扩展性。继承可以让子类具有父类的属性和方法或重新定义、追加属性和方法等。
- 多态
-
初学者如何学习面向对象?
推荐采用分两步走策略:
- 首先,掌握面向对象基本语法,平时有意识的抛开计算机思维,使用生活中的思维进行编程;
- 最后,初学者只有通过大量的练习和思考,才能够慢慢去领悟面向对象的这种思想。
三、ES5 中的类与继承
流行的面向对象编写方式:构造函数 + 原型的混合方式来模拟一个类。
- 构造函数
构造函数本质上就一个函数,通过构造函数负责添加属性。
- 原型
原型 prototype,通过原型负责添加方法。
四、ES6 中的类与继承
ES6 中的 class 其实本质上是在构造函数和原型的混合方式的基础上做的进一步封装。
- class:定义类
- constructor:构造方法,用来初始化的,也是唯一的。
- class 子类 extends 父类 {……}
- 使用super时需要注意的地方:
- 子类必须在 constructor 方法中调用super方法;
- 必须先调用super方法,才可以使用 this,否则报错!