宝哥软件园

完全理解面向对象的JavaScript(来自ibm)

编辑:宝哥软件园 来源:互联网 时间:2021-11-14

如今,JavaScript大行其道,各种应用越来越依赖它。Web程序员逐渐习惯了使用各种优秀的JavaScript框架快速开发Web应用,从而忽略了对原生JavaScript的学习和深入理解。所以经常会发生很多做了很多年JS开发的程序员,总是对闭包、函数编程、原型一头雾水,即使使用框架,他们的代码组织也很差。所有这些都是对原生JavaScript语言特性理解不足的表现。要想很好地掌握JavaScript,首先要摒弃Java、C#等其他一些高级语言的干扰,从函数语言的角度充分理解JavaScript的原型面向对象特性。抓住这一点后,就有可能更好地运用语言。本文适合以下人群:使用过JS框架但对JS语言本质缺乏了解的程序员,有开发Java、C等语言经验,准备学习和使用JavaScript的程序员,以及对JavaScript是否面向对象一直模棱两可但想知道真相的JS爱好者。重新理解面向对象为了说明JavaScript是一种彻底的面向对象语言,有必要从面向对象的概念入手,讨论一下面向对象中的几个概念:一切都是面向对象的,具有封装和继承的特性。对象之间使用消息通信,它们各自的信息隐藏基于这三点。c语言是一种半面向对象、半面向过程的语言,因为它虽然实现了类的封装、继承和多态,但是存在非对象性质的全局函数和变量。Java和C#是完全面向对象的语言。它们以类的形式组织函数和变量,所以没有对象就不能存在。但在这里,函数本身是一个过程,只附加在一个类上。然而,面向对象只是一个概念或编程思想,它不应该依赖于某种语言的存在。比如Java用面向对象的思想来构造自己的语言,实现了类、继承、派生、多态、接口等机制。但是,这些机制只是实现面向对象编程的一种手段,并不是必须的。换句话说,一种语言可以根据自身的特点选择合适的方式实现面向对象。因此,由于大多数程序员首先学习或使用的是像Java、C这样的高级编译语言(虽然Java是半编译半解释的,但一般解释为编译的),他们对“类”的面向对象实现已经有了先入为主的认识,在学习脚本语言时,习惯性地使用面向类的面向对象语言中的概念来判断语言是面向对象的语言还是具有面向对象的特征。这也是阻碍程序员深入学习和掌握JavaScript的重要原因之一。实际上,JavaScript语言是以一种叫做原型的方式实现面向对象编程的。让我们讨论一下基于类的面向对象方法和基于原型的面向对象方法在构建客观世界方面的区别。基于类的面向对象方法和基于原型的面向对象方法的比较在基于类的面向对象方法中,对象是由类生成的。在基于原型的面向对象模式中,通过构造器使用原型来构造对象。举一个客观世界的例子来说明两种方式的认知差异。比如工厂造车,一方面工人必须参考一个工程图纸和设计,规定如何造车。这里的工程图就像语言中的类,汽车就是按照这个类制造的。另一方面,工人和机器(相当于建造者)使用发动机、轮胎和方向盘(相当于原型的各种属性)等各种零件来建造汽车。事实上,关于这两种方式中哪一种更彻底地表达了面向对象思想,仍然存在争论。

但笔者认为原型面向对象是一种更彻底的面向对象方式,原因有以下几点:第一,客观世界中对象的产生是其他物理对象构造的结果,而抽象的“图纸”不能产生“汽车”,也就是说类是抽象的概念而不是实体,而对象的产生是实体的产生;其次,根据最基本的面向对象规则,即一切都是对象,类本身不是对象,但原型模式下的构造函数和原型也是原型模式下其他对象构造的对象。第三,在面向类的面向对象语言中,对象的状态由对象实例持有,对象的行为方法由声明对象的类持有,只能继承对象的结构和方法。在原型面向对象语言中,对象的行为和状态属于对象本身,可以一起继承(参考资源),更接近客观现实。最后,面向类的面向对象语言如Java,为了弥补面向过程语言中全局函数和变量不能使用的不便,允许在类中声明静态属性和静态方法。

更多资讯
游戏推荐
更多+