美文网首页
全面理解面向对象的JavaScript

全面理解面向对象的JavaScript

作者: Allan要做活神仙 | 来源:发表于2017-05-27 15:46 被阅读42次

    面向对象是一种编程思想,Java、C#等都以“类”作为面向对象的实现方式。从而可能阻碍大家对于面向对象编程的语言的判断。

    因为javascript的面向对象是基于原型(prototype)的方式实现的。

    实现面向对象编程的方式其实有:
    基于类的(class-based)面向对象和 **基于原型的 (prototype-based) **面向对象这两种方式。

    为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念:
    一切事物皆对象
    对象具有封装和继承特性
    对象与对象之间使用消息通信,各自存在信息隐藏

    基于类的面向对象和基于原型的面向对象方式比较

    基于类的面向对象方式中,对象(object)依靠类(class)来产生。而在基于原型的面向对象方式中,对象(object)则是依靠构造器(constructor)利用原型(prototype)构造出来的。

    事实上关于这两种方式谁更为彻底地表达了面向对象的思想,目前尚有争论。但笔者认为原型式面向对象是一种更为彻底的面向对象方式,理由如下:

    首先,客观世界中的对象的产生都是其它实物对象构造的结果,而抽象的“图纸”是不能产生“汽车”的,也就是说,类是一个抽象概念而并非实体,而对象的产生是一个实体的产生;
    其次,按照一切事物皆对象这个最基本的面向对象的法则来看,类 (class) 本身并不是一个对象,然而原型方式中的构造器 (constructor) 和原型 (prototype) 本身也是其他对象通过原型方式构造出来的对象。

    再次,在类式面向对象语言中,对象的状态 (state) 由对象实例 (instance) 所持有,对象的行为方法 (method) 则由声明该对象的类所持有,并且只有对象的结构和方法能够被继承;而在原型式面向对象语言中,对象的行为、状态都属于对象本身,并且能够一起被继承(参考资源),这也更贴近客观实际。

    最后,类式面向对象语言比如 Java,为了弥补无法使用面向过程语言中全局函数和变量的不便,允许在类中声明静态 (static) 属性和静态方法。而实际上,客观世界不存在所谓静态概念,因为一切事物皆对象!而在原型式面向对象语言中,除内建对象 (build-in object) 外,不允许全局对象、方法或者属性的存在,也没有静态概念。所有语言元素 (primitive) 必须依赖对象存在。但由于函数式语言的特点,语言元素所依赖的对象是随着运行时 (runtime) 上下文 (context) 变化而变化的,具体体现在 this 指针的变化。正是这种特点更贴近 “万物皆有所属,宇宙乃万物生存之根本”的自然观点。在 程序清单 1window 便类似与宇宙的概念。

    本文引自(有删减和编辑):
    https://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/#listing6

    相关文章

      网友评论

          本文标题:全面理解面向对象的JavaScript

          本文链接:https://www.haomeiwen.com/subject/nqyqfxtx.html