JS 面向对象

JavaScript012

JS 面向对象,第1张

为了能够清楚的解释这一切,我先从对象讲起。从其他面向对象语言(如Java)而来的人可能认为在JS里的对象也是由类来实例化出来的,并且是由属性和方法组成的。

实际上在JS里并不是如你所想(我开始是这么想的)那样,对象或直接称为object,实际上只是一些映射对的集合,像Map,字典等概念。JS里有大概7种类型(加上Symbol),数字、字符串、null、undefined、布尔、Symbol、对象。除对象以外的其他类型属于原始类型,就是说它们比较单纯,包含的东西比较少,基本上就是字面量所表示的那些(像C语言中的一些类型,就是占那么多空间,没有其他的东西)。object基本上是一些键值对的集合,属于引用类型,即是有一个名字去指向它来供别人使用的,就好像比较重的东西你拿不动,而只是拿了张记录东西所在地的纸条。所以当A对象里嵌套了B对象,仅表示A里面有一个引用指向了B,并不是真正把B包含在A里面,虽然看起来是这样(尤其是从对象的字面量上来看),所以才会有所谓的深拷贝与浅拷贝。

有句话叫“JavaScript里一切皆对象”,是因为在很多情况下原始类型会被自动的转为对象,而函数实际上也是对象,这样这句话看起来就很有道理了。

说明对象的本质是为了正确地认识对象,因为这关系到后面的理解。

init只是习惯性写法,一直以来编程人员的编写习惯而已。不是必须要这样写,不过养成共同的习惯对于自己及他人以后对代码进行修改或者浏览会提供方便。

至于为什么需要初始化,这是大部分对象所需要具有的通用属性。可能网站小的时候init初始化共用属性作用不大,但当多次调用该对象时,对象初始化则可能根据调用个体的不同而对本身进行调整。打个比方,“动物”是一个对象函数,作用都是给对象画上四条腿。把羊、牛、狮子分别赋予“动物”函数时,“动物”函数就需要根据个体的不同进行初始化确定四条腿的粗细了。

建议在编写对象时按照通用的写法,毕竟一个对象不是目前可以用到的,以后在其它地方也会用到或者会进行升级拥有更强大的功能,这时候按照通用习惯编写代码就显示出它的优势了。