面向对象和面向类

Posted by liveipool on February 21, 2017

面向对象和面向类

面向对象编程强调的是数据和操作数据的行为本质上是相互关联的,因此好的设计就是把数据以及和它相关的行为打包起来,这在正式的计算机科学中有时被称为数据结构
我们一般讨论的是面向对象设计模式,比如单例模式、工厂模式、原型模式、观察者模式等。
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它和真正面向对象的语言也有区别,因为它的语法中没有class。然而,也有人说,JavaScript才是真正应该被称为“面向对象”的语言,因为它是少有的可以不通过类,直接创建对象的语言。但因为大部分人所说的面向对象的语言中是包括有类的,所以我们还是把JavaScript当作一种和其他有类的面向对象的语言有区别面向对象的语言。

在《你不知道的JavaScript中》,作者讲述了一个概念:面向类的设计模式。

面向类的设计模式:实例化(instantiation)、继承(inheritance)、多态(polymoriphism)。
多态:父类的通用型为可以被子类用更特殊的行为重写。实际上,相对多态性允许我们从重写行为中引用基础行为。 类是一种设计模式。许多语言提供了对于面向类软件设计的原生语法。

JavaScript也有类似的语法,但是和其它语言中的类完全不同。
即使是在ES6中有了class关键字之后,是否就是说JavaScript中有类的概念了呢?不是
在JavaScript中,可以通过一些方法来模拟类,但总的来说,在JavaScript中模拟类是得不偿失的,虽然能解决当前的问题,但是可能会埋下更多的隐患。
上网也查了一下,罕有说面向类的设计模式的,都还是在说面向对象。就JavaScript而言,记住至今为止,其中还没有类的概念,ES6中的class实际上还是一个函数。因此,始终要记住,虽然JavaScript是一个面向对象的语言,但它和其他的有类这个概念的面向对象的语言还有所区别。
要好好掌握JavaScript中的面向对象的概念:JavaScript,面向对象的程序设计