![悟透JavaScript](https://wfqqreader-1252317822.image.myqcloud.com/cover/923/656923/b_656923.jpg)
2没有类
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0013_0001.jpg?sign=1738846827-wBdq7xIjzpf9dX5LXXcfock1hfxkqCIN-0-57a79048b9d03db22c4722d085ffcbfa)
object就是对象的类型。在JavaScript中不管多么复杂的数据和代码,都可以组织成object形式的对象。
但JavaScript却没有 “类”的概念!
对于许多面向对象的程序员来说,这恐怕是JavaScript中最难以理解的地方。是啊,几乎任何讲面向对象的书中,第一个要讲的就是“类”的概念,这可是面向对象的支柱。这突然没有了“类”,我们就像一下子没了精神支柱,感到六神无主。看来,要放下对象和类,达到“对象本无根,类型亦无形”的境界确实是件不容易的事情啊。
这样,我们先来看一段JavaScript程序:
http://www.leadzen.cn/Books/WuTouJavaScript/1/JS01.htm <script type=”text/javascript”> var life={}; //光溜溜的生命对象 for(life.age=1;life.age<=3;life.age++) { switch(life.age) { case 1: life.body=“卵细胞”; //增加body属性 life.say=function(){alert(this.age+this.body)}; //新建say方法 break; case 2: life.tail=“尾巴”; //增加tail属性 life.gill=“腮”; //增加gill属性 life.body=“蝌蚪”; life.say=function(){alert(this.age+this.body+”-”+this.tail+”,”+this.gill)}; break; case 3: delete life.tail; //删除tail属性 delete life.gill; //删除gill属性 life.legs=“四条腿”; //增加legs属性
life.lung=“肺”; //增加lung属性 life.body = “青蛙”; life.say = function(){alert(this.age+this.body+”-”+this.legs+”,”+this.lung)}; break; }; life.say(); //调用say方法,此方法逻辑每次都会动态改变。 }; </script>
不过,在看完这段程序之后,请你思考一个问题:
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0014_0001.jpg?sign=1738846827-7ArvWTU81sJmNOZ7RZgfNtCDISmXWGtt-0-38a74348752e4bf300c30fbfad9f4df7)
这段JavaScript程序一开始产生了一个生命对象life,life诞生时只是一个光溜溜的对象,没有任何属性和方法。
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0014_0002.jpg?sign=1738846827-25HT7hl4SWQOpbOXEjHlQ0CYKvJY2dEF-0-67dc0498485b694ee40e5e4b4cf99899)
在第一次生命过程中,它有了一个身体属性body,并有了一个say方法,看起来是一个“卵细胞”。
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0014_0003.jpg?sign=1738846827-VBSDz8BqIwp2P41JODKRxBOxcdX8XRQ2-0-4f57b56232ce54285126829221ce82b0)
在第二次生命过程中,它又长出了“尾巴”和“腮”,有了tail和gill属性,显示它是一个“蝌蚪”。
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0014_0004.jpg?sign=1738846827-BWe9yUOH4DZkPdXjK47nWLs8Ij5NBlLY-0-a5a57a4410c5f22ee2010d0bfeb0258e)
在第三次生命过程中,它的tail和gill属性消失了,但又长出了“四条腿”和“肺”,有了legs和lung属性,从而最终变成了“青蛙”。
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0014_0005.jpg?sign=1738846827-dUmaqRtiVf3mNBB3egLyHmC2HZhUwIaI-0-e61b32736300f409013501e7a887a817)
如果,你的想像力丰富的话,或许还能安排他和命中注定的姑娘相遇。
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0015_0001.jpg?sign=1738846827-H3Sulla94UwrcfmczWmhnvtGCmLG7hb7-0-9fe83cb6b8df9f840f2a67436137f7d9)
真爱之吻让他变回英俊的王子。
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0015_0003.jpg?sign=1738846827-HjlH0mWPLZR8AfrxXcghn5MClKBFl63p-0-cbdf34ebfa2e17de9298da39f29fbaf5)
两个人走进婚姻的殿堂从此过着幸福的生活直到永远、永远⋯⋯
![](https://epubservercos.yuewen.com/F20E94/3590319903160201/epubprivate/OEBPS/Images/figure_0015_0002.jpg?sign=1738846827-kce7LTf9o1v39DzdsRhBhr5zlxLE09W1-0-27551415c891c6e91164dfb113d8e14a)
我们一定需要类吗?
还记得儿时那个“小蝌蚪找妈妈”的童话吗?也许就在昨天晚,你的孩子刚好是在这个美丽的童话中进入梦乡的吧。可爱的小蝌蚪也就是在其自身类型不断演化过程中,逐渐变成了和妈妈一样的“类”,从而找到了自己的妈妈。这个童话故事中蕴含的编程哲理就是:对象的“类”是从无到有,又不断演化,最终又消失于无形之中⋯⋯
“类”,的确可以帮助我们理解复杂的现实世界,这纷乱的现实世界也的确需要进行分类。但如果我们的思想被“类”束缚住了,“类”也就变成了“累”。想象一下,如果一个生命对象开始的时就被规定了固定的“类”,那么它还能演化吗?蝌蚪还能变成青蛙吗?还可以给孩子们讲小蝌蚪找妈妈的故事吗?
所以,JavaScript中没有“类”,类已化于无形,与对象融为一体。正是由于放下了“类”这个概念,JavaScript的对象才有了其他编程语言所没有的活力。
如果,此时你的内心深处开始有所感悟,那么你已经逐渐开始理解JavaScript的禅机了。