据说,在程序界,“面向对象”是一个高富帅的标志,有了“面向对象”的语言,更加的收到追捧和认可。比如我们的富二代C++,老少通吃的明星语言Java,移动新贵Objective-C,国民哥哥python,都是大家公认的高富帅。Javascript也是人尽皆知,经常活跃在各种大大小小的场合。它的风格像老爷爷C,大家都觉得不像一个高富帅(面向对象)的品味,所以不少人以为它只是个跑腿(面向过程)的。殊不知,它也是一个名符其实的公子哥,那么就让我们来扒一扒它的身世。
在了解js的身世之前,我们有必要知道什么样才叫“面向对象”呢?
具有这几个特性的:封装、继承和多态,就是面向对象。
大家知道,那些公认的高富帅都有一个共同秘密武器,叫做类,通过类可以轻松实现这三点。可是js没有类啊。。。
可是谁说过实现面向对象一定得要有类?类只是大家学了Java这些主流面向对象语言后先入为主的概念,“类”和“面向对象”并不是要捆绑在一起的。事实是,世上有两条路可以通往面向对象的圣土,除了大家熟知的阳关大道“类”之外,还有另一条蹊径,叫做“原型”。而js就是走了这条小路的人。
基于“类”的面向对象和基于“原型”的面向对象有什么不同呢?
它们的形式上确实是不一样的,但是这种不一样并不是重要,就像两种语言的语法不同,没有谁好谁坏,因为它们实现的目的都是相同的。
如果实在想区别一下,那么基于“类”的面向对象像是临摹,先有一个范本(就是类),照着范本的样子我再创建一个副本(对象)。基于“原型”的