面向对象是一种编程风格,Python一切皆对象,把一切东西看成是一个个对象,比如人、耳机、鼠标、水杯等,他们各自都有属性,比如:耳机是白色的,鼠标是黑色的,水杯是圆柱形的等等,把这些对象拥有的属性变量和操作这些属性变量的函数打包成一个类来表示
面向对象和面向过程都是一种编程思想
* 对象: Object
* Object是js中的基类,js中所有的内置类都是在Object的基础上构造出来的
* 所以,js本身就是一门面向对象的编程语言
* 我们在去研究这些js中的实例(string, number, array, promise...)的时候, 一般都是研究他们共同的属性和方法, 通过对于这些属性和方法的总结,把拥有同一属性和方法的一些实例归为一类, 然后再去研究和观察这个类
* js中的面向对象会稍微有些特殊,因为js中的面向对象都是根据原型和原型链的规则来构建出来的
* 我们常用的一些框架也是通过面向对象的编程思想构建出来的(Vue Angular React JQuery)
* 我们自己封装过的一些组件/插件/方法(API.js,轮播图,分页器,$.ajax)也是基于面向对象开发的,通过创造不同的实例, 来管理一些方法和属性
面向对象有三大特性:封装,继承,多态。
封装
遵循高内聚 低耦合 的思想,将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。
意义:
- 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;
- 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了;
- 对类的属性和方法增加访问权限控制。
继承
子类继承父类的属性和方法,目的 可以让子类的 实例 能够使用父类的属性和方法
JS中的继承有很多种
- 原型链继承
- call继承(借用构造函数继承)
- 组合继承
- .寄生组合继承
- ES6中新增Class继承
多态
- 重写 修改已有的属性和方法
- 重载 js本身是没有重载的,重载对于客户端代码来说没有必要,我们可以通过arguments或者条件判断来实现重载效果