首先我们理解一下面向对象和面向过程
面向过程:面向过程的思想是把一个项目或者一件事情按照顺序一步一步完成,更加关注过程分步执行。
面向对象Object Oriented Programming:面向对象的思想把一个项目或者一件事情,分成更小的项目或者更小的部分,每一个部分负责什么功能,然后在把这些部分组成一个整体。
面向对象的特点:
1.抽象:关注核心,关注重点。
2.封装:和函数特点吻合(常用的重复的代码进行封装,避免代码冗余)
3.继承:子类可以继承父类,不能影响父类。
4.多态:js使用比较少,对象具有多种不同的形态
面向对象的适用场景--优点:
面向对象适合复杂的场景。避免全局污染(全局变量全局函数),更方便的扩展程序。更清楚,更熟悉系统提供的一些默认类和对象的实现-系统提供的类(构造函数)全部采用面向对象实现。
1.什么是类?
类(构造函数):一类事物,抽象,不占据内存。例如:人类
程序中的类(构造函数):Function/Array/Object/Math/Date/RegExp...
2.什么是对象?
对象:一切皆对象,对象是属性的无序集合,类下面具体的事物,占据内存的。 例如:某一个具体的人张三
实例化对象:new 类(构造函数)--产生实例对象
3.属性和方法
对象:属性的无序集合,通过属性值将对象分成属性和方法。--对象 = 属性 + 方法
属性:描述对象的外观,属性一般情况下都不会相同。例如:张三的身高体重年龄
方法:描述对象具有的功能,方法一般情况下都是相同的。例如:张三能说话,能行走
4.属性和方法与变量和函数的区别
当一个变量不自由了,理解成属性。
当一个函数不自由了,理解成方法。
5.函数属于对象,同时也是对象的构造器(对象是由函数构建出来的)
推导面向对象
一.目标
1.以系统的类(构造函数)为基准,通过类似的方式解决项目中的问题或者案例。
2.为了实现上面的目标,我们不论案例功能是否复杂都要尽量采用面向对象的写法。更好的和后端进行交互。
3.学会利用面向对象技术解决一切问题。
二.对象的创建方式(通过构造函数、字面量创建)
问题1:通过这样创建多个对象会出现大量重复代码
解决方案:此时我们可以用工厂模式也就是封装解决
问题2:工厂模式有弊端,帮我们解决创建多个对象代码冗余的问题,无法解决对象识别问题,所有的对象依然由object创建的。不像Array,Date......
解决方案:参考系统类(构造函数),调用的时候前面添加new.
结论:一旦通过new调用函数,当前的函数就不是普通函数,变成了构造函数了(符合构造函数的特点)。
构造函数的两个特点:首字母大写,new调用。
问题3:构造函数可以解决对象的识别问题,但是构造函数里面的属性和方法是私有的,特别是方法,每次使用都要重新创建,不同于我们的系统对象。
解决方案:将方法绑定在prototype原型上
总结:面向对象写法--混合方式进行开发(构造函数+原型)