面向对象编程一种编程设计思想。当我们编程时,把对象作为编程的单位,对象包含了数据和操作数据的函数。
封装
封装也叫做信息隐藏或者数据访问包含。类通过暴露有限的访问接口,授权外部仅能通过提供的方法来访问内部信息。
JavaScript 在 ES5 里面通过函数作用域来实现封装,ES6,可以通过 public,private等关键字来实现。
举个例子。我们前端使用 Vue 这个框架,大部分时候我们是不需要知道 Vue 源码如何实现双向绑定,怎么实现各种指令,我们只需要知道怎么使用,要注意哪些事项就可以了。
抽象
封装是隐藏信息,保护数据,抽象是隐藏方法的具体实现,让调用者只关心提供的方法。
抽象是一种通用的设计思想,没有啥特异性,所以有时候并不被当做面向对象的特性之一,有时候大家直接说面向对象三大特性,忽略抽象。
继承
继承可以分为单继承和多继承,单继承是指一个子类继承一个父类,多继承是指,一个子类继承多个父类。
继承的好处就是代码复用。如果两个类有共同的属性和方法,可以把这些方法抽取到父类中,然后让子类继承父类。比如苹果和梨,都是水果,都有水果的特性。可以把抽取出一个水果的父类,让苹果和梨分别继承他们。
多态
多态是指子类可以替代父类,在实际的代码运行中,调用子类的方法实现。
鸭子类(Duck Type) 的大概意思是,当我们需要一千个鸭子嘎嘎叫的时候,我们只找到 999 个鸭子,但是同时我们找到了一个鸡,这个鸡不是咯咯叫,而是跟鸭子一样,嘎嘎叫。这个事时候我们叫当这个鸡是一个鸭子。实际上就是要把做什么和谁去做,分开。
JavaScript 是动态脚本语言,天然支持多态。
面向对象和面向过程的区别
面向过程编程是一种编程范式或者风格,他以过程作为组织代码的基本单元。以数据和方法相分离为主要特别。
面对对象相比面向过程的三大好处:
1.更适合大规模复杂开发。
2.更易用,易扩展,易维护。
3.更人性化。
参考资料
极客时间《设计模式之美》