上一集中,重点介绍了谁动了你的代码。这里先总结一下:咱们的代码从敲下来到运行出结果,经历了两个阶段:分析期与运行期。在分析期,JavaScript分析器悄悄动了我们的代码;在运行期,JavaScript又按照自己的一套机制进行变量寻找。我们的代码是如何被动了手脚的,相信看官你已经明白。但是前面所聊均是面向过程的,如果说只是简单的面向过程言语,那JavaScript能够有基本的数据类型,基本的执行单元那也差不多了。但是故事并没有在此结束。接下来剧情的发展,那才是造成今天鞋同们困惑的地方,那们还是从故事开始。大伙不要嫌楼主啰嗦(楼主确实是个啰嗦之人),讲这故事是为了让大伙了解当年布大师设计JavaScript的背景,融入布大师的设计思维,你就知道JavaScript为什么会有哪些奇怪的设计。好,故事开始了。

  前几集的故事中,咱们提到了布大师只想设计一个简单、满足浏览器进行数据检验的脚本言语。当时的web应用毫无颜值,犹如白纸黑字,顶多再加点图片。所以,你也别期待当时的布大师会想到如UI交互、动画效果等等的设计需求。为此,从一开始布大师设计的JavaScript就是一个过程式的简单的言语,但是布大师也不是个迂腐落后之人。c的升级版c++、让编程界有点疯狂的Java,布大师也不能视而不见,多少受点影响。于是乎,布大师想:我这JavaScript能否也玩点OOP思想呢?布大师这么一想,一堆问题就来了,本来就没打算搞个正式的OOP脚本,也没设计有class、extend,更没有override啥的。但是今天拍脑袋一想要玩OOP,那总得在现有的设计基础上去实现OOP三大思想(封装、继承、多态)吧。那咱们就看看布大师是如何给JavaScript赋予OOP的。

封装

  概念,楼主就不说了。但是你看看JavaScript定义的那些数据类型,压根就没class的概念。没有类何来实例,没有实例谈何封装?布大师翻来覆去研究已经定义的数据类型,再对比了c++、java。他发现c++、java每次创建对象都离不开调用构造函数。布大师灵感一来“对!绕过class直接调用构造函数创建对象,刚好function可以作为构造函数”。于是乎,你见到了今天JavaScript是这样创建实现对象的:

网友评论