怎样简单直接的理解Javascript中一些关键名词?
我看了你的问题,感觉你是在试图理解原型链的特性及用法。大概说一下吧。JavaScript是个多范式的语言,即有面向对象语言的特性,又有函数式语言的特性。而它的面向对象特性是基于原型链的,而不是基于类的。基于类的,如常见的C++、Java等语言,更容易被人理解一些,因为它符合人对事物分类的直觉。人在认识事物的时候,会很自然的去分门别类,包括:(1)区分对象和其属性,如区分树及树的高度、树的形态;(2)区分整体和组成部分,如区分树和树枝、树叶;(3)区分不同对象,如区分杨树与柳树。以上三点是分类原则的根本,也是类设计的根本。在有了类以后,会出现继承关系,比如杨树和柳树都是树,也是很自然就能理解的。而JavaScript这种面向原型的方式则像是更纠结于底层实现,在概念层面上反而不直观,比较难于让人理解。它背后的思想是:不去在意是否能区分出类,能构造出想要的东西就行了。具体来说,就是在构建一个新对象时,将一个已有对象作为原型,新对象自动继承原型对象的所有属性(方法作为一种特殊属性),然后通过在新对象上修修补补,比如增加新属性、修改或屏蔽原有属性等等,以获得想要的对象。在JavaScript里,一个由原型生成的对象可以进而作为另一个对象的原型,从而形成原型链。可以看出,这里面没有显式的出现类的概念。面向对象的概念之所以变得流行,一方面是它更贴近人对世界的认识方式,另一方面是建立类就很自然地形成了封装,而有效的封装有利于实现软件开发所追求的『高内聚、低耦合』目标,这对于大型软件开发尤其重要。大型软件由于其内部逻辑关系复杂,一不小心就会造成代码之间的依赖关系混乱,带来的后果就是,当由于需求变化想去改一个地方的时候,发现牵扯到的其他地方非常之多,甚至于会分析不清楚改了一个地方到底会影响谁。通过类的封装,尽可能把变化影响的范围局限在一个类的内部,就可以很大程度的降低影响分析及改造的难度。JavaScript在设计之初,目标仅是为HTML页面表单输入项做提交前的简单校验。随着WWW的发展和流行,对Web页面的动态要求越来越高,出现DHTML,JavaScript可以用来操作DOM,从而动态改变HTML页面内容。又随着Internet的普及及移动互联网的流行,对页面交互体验的需求日益增强,于是出现Web2.0技术、RichClient技术等等。JavaScript原本只是一个简单的脚本语言,被用来实现越来越多的功能。由于JavaScript代码复杂性的增大,必然也有『高内聚,低耦合』的目标要求,而基于类的面向对象是一个不错的解决方案,于是很多人开始在JavaScript上用基于原型链的面向对象去模拟基于类的面向对象,而且形成了趋势,这也就是为什么很多讲JavaScript的教程会把这个作为一个重点的原因。既然基于类的面向对象这么有用,因此在ES6(或称为ES2015)标准里,显式的定义了类Class,因此,未来不需要再手工去模拟实现类,语言本身已经内置了这个特性。原型链实际上是JavaScript实现面向对象特性的一个底层机制,你可以不必太纠结于此,知道大概怎么用就行,不一定要追求理解背后的语言实现细节。实际上大部分的应用开发里也用不到这个特性,除非你有大量对象而且它们之间还有复杂的继承关系,或者你是开发一个JavaScript框架工具。对于初学者而言,先学会语法,知道怎么用即可。真正的理解背后的概念,一定是要经过一段时间的,是要有一定的码量支撑的。因为只有在你写了足够多的代码以后,你才会遇到能够帮助你理解这些概念的场景,届时你才会设身处地的大悟「哦,原来这个特性是为了解决这样的问题」。所以别着急,学语言必须多写代码、多练习。仅完成书上给出的练习可能不够,还需要你自己设想一些需求,然后尝试去实现,这样进步会比较快。当然,也并不是说就不要去理解概念,「学而不思则罔」,多思考是有益的,只是不用太纠结,不是必须先理解所有概念才能去写代码的。有些时候,概念理解上有偏差,但是代码却能用、能实现所要求的功能的情况也是很常见的。
■网友
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 孕妇到了预产期,小孩还没有入盆,请问是该等下去还是直接剖腹产
- 环球车讯网|【帮你选车】简单粗暴 前后双电机+四驱 三款纯电SUV推荐
