这篇要谈的面向对象(OOP),OOP被广泛认识并应用,个人经历是从JAVA语言开始,javascript一直都说:我和JAVA不要紧,但从前面的语法结构、运算符、标示符关键字等等几乎都与JAVA同样,起码来讲是大量、甚至是为了迎合市场需求,彻底照抄了JAVA,但其语言核心确实是两个彻底不一样的语言。但js确实是面向对象语言,由于它支持封装、汇集、继承和多态四个OOP基本特征。javascript
犀牛书对js的OOP讲解我的感受不够直接易懂,以我多年来JAVA创建的严谨OOP思惟,看函数章节时很是的头痛(OOP语言怎么会有这么麻烦的函数?),当看到对象章节,本觉得会容易理解,结果几乎崩溃。但为了掌握这门语言,耐着性子,翻阅了其余的书籍,逐步有了一些新的理解,特别是匹配JAVA语言背景的状况的理解,不必定正确,这里记录下来。java
OOP中,首先应该有类定义,来是现实世界的描绘,是对象的模板,对象从类实例化而来,是类的具象化。ECMAScript把对象定义描述为对象的配方,没有正式的类,所以类并不存在。既然规范这么定义,包括基本权威书籍,都没有将类概念单独拿出来讲,从个人理解,其实对象定义,是近似于类,起码从功能和做用来讲,二者是等价的,能够二者混在一块儿来讲。函数
回顾JAVA语言的对象,目的是借助对JAVA对象概念,帮助咱们理解JS的对象。没有翻阅资料,凭印象来聊聊,主要是基本概念,不保证严谨。学习
一、一切均是对象。为了效率,JAVA中基本类型如int、boolean等不是对象,但都具备封装对象,其余一切都可描述为对象,都继承自根对象Object。对象
二、对象都具备构造函数,在对象实例化过程当中执行初始化,且首先会调用super()。若是不定义构造函数,JVM会默认执行无参数构造函数;继承
三、对象由构造函数、属性和方法组成,为保证封装性,可以使用做用域标示符private、protected、public、default等标示可访问性;接口
四、类、抽象类、接口都是对象,也都是继承自Object。ip
五、类定义是对现实世界的抽象,对象从类实例化而来,是以类为模板,具象化的实体;作用域
六、抽象类是类的模板,体现总体和个体之间的差别化;原型
七、接口是对象间交互方式的约定,是定义类的契约。
从这些描述,能够很是容易的想象出一个以Object为根的对象树。良好的封装性、规范的定义语法、清晰的结构关系,使之成为很是稳定可靠的对象描述系统。
以OOP思路对现实进行建模的时候,对象属性抽象物件的属性,对象方法抽象物件的行为,方法同时做为对象间交流的消息传递接口,实现对象间的交互,从而构建系统模型。
整体上讲,JAVA、C++这类语言是基于类的面向对象,而JS是基于原型的面向对象,具备基于类的面向对象基础以后,再理解JS就感受很是的别扭,但对于已经属性基于类的面向对象知识以后,不可避免会受到干扰。我的理解,在JS面向原型面向对象语言学习的时候,若是比对你的JAVA经验,可以找到相同和不一样的地方,可以更加透彻的加深理解。毕竟虽然实现面对对象的方式不一样,但二者要达成的目标是一致的。
后面一篇咱们将借助对JAVA对象的理解,来学习JS的对象模型。