什么是面向对象?
在我们开始区分差异之前,我们应该简单地梳理一下面向对象和面向对象的概念
目标
现实世界中,随处可见的一个东西就是物体,物体就是事物存在的实体,比如人、桌子、电脑、高楼等等。人类解决问题的方式总是把复杂的事情简单化,所以会思考这些物体是由什么部分组成的。一般来说,一个对象分为两部分,即动态部分和静态部分。静态部分,顾名思义,是不可移动的部分,称为“属性”。任何物体都会有自己的属性,比如人,包括身高、胖瘦、性别、年龄等属性。然而,一个具有这些属性的人会做出什么样的动作,也是一个值得探讨的部分。这个人会哭,会笑,会说话,会走路,这些都是这个人所具有的行为(动态部分)。人类可以通过讨论物体的属性和观察其行为来理解物体。
总之:在现实世界中,所有可见的、有形的物体都是物体,每个物体都有自己的属性和行为。
面向对象是一种软件开发方法(面向对象编程)
面向对象是一种理解和抽象现实世界的方法,是计算机编程技术发展到一定阶段的产物。
面向对象的基本思想是使用类, 对象, 继承, 封装, 消息等基本概念进行程序设计.在系统构造中尽可能的利用人类的自然思维方式,强调以现实世界中的事物(对象)为中心来思考,认识问题,并根据这些事物的本质特征,把它们抽象表示为系统中的类.这使得软件系统的组件可以直接的映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌.面向对象方法的三个基本特征:
封装性: 将对象的实现细节隐藏起来,通过一些公共的接口方法来供外部调用对象的功能 (体现出了隐藏细节和代码重用这两个特点)继承性: 是面向对象实现的的重要手段,子类继承父类,子类直接获得父类的非private属性和方法 (体现出了代码的重用性和扩展性)多态性: 多态是指多个对象拥有相同的方法但是有不同的实现 (体现出了代码的灵活性)总之:面向对象是一种编程思想,就像类规则一样,没有实体。整个思路就是把现实世界中的物体(以及物体之间的关系)映射到计算机中。
JS也是一种面向对象的语言,但在细节实现上与其他OO语言有部分不同
Java是一种面向对象的语言(基于原型的面向对象语言)
括号中的注释:基于原型的面向对象语言
在JS里,你遇到的几乎都是对象。但是,它并不是真正的面向对象编程(OOP)语言,因为它的语法中没有类。面向对象语言有一个标志,就是它有类的概念(类就像一个模板,通过它我们可以不断地生成新的对象)。您可以基于该类创建任意数量的实例对象。但是在JS中,它没有类。既然没有类,怎么生成新的对象呢?
首先,我们来看看基于类的面向对象语言的对象生成方法。基于类的面向对象语言(以Java为例)
可以看到,使用类类作为模板,我们可以使用关键字new来生成新的对象
JS这种没有类的语言是如何产生对象的?
实际上,Java 语言是通过一种叫做 原型(prototype)的方式来实现面向对象编程的对象(object)是依靠 构造器(constructor)利用 原型(prototype)构造出来的//基于原型的面向对象语言原型
ECMA允许通过构造函数创建对象。每个构造函数实际上都是一个函数对象。
所有的函数都有一个 prototype(显示原型) 属性,这个属性引用了一个对象,即原型对象,也简称原型,每个函数被创建的时候都会有一个prototye属性,这个属性会指向函数的原型对象。所有对象都有 constructor 属性,这个属性指向构造此对象的函数的引用。所有对象都有 proto(隐式原型) 属性(只读),这个属性指向构造此对象函数的原型。对象可以通过“new keyword+constructor call”来创建(这里需要注意的是new与其他语言示例有不同的含义:Java,这将在下面的文章中讨论)
构造函数、原型和原型之间的关系见下图
这里要具体说明JS的关键字new
为了将这种语言与著名的Java联系起来(虽然我们现在都知道是雷锋和雷锋塔的关系),早期Java的发明者使用了new关键字来限制构造函数调用和创建对象,使其看起来类似于Java在语法上创建对象的方式。但需要指出的是,这两种语言中“新”的含义并没有什么关系,因为它们的对象构造机制完全不同。正是因为这里的语法相似性,很多习惯了面向类的面向对象语言中创建对象的方式的程序员,很难透彻理解JS对象原型构造的方式,因为他们始终不理解JS语言中“函数名可以作为类名”的现象。本质上JS只是借用了这里的关键字new,仅此而已;换句话说,ECMA可以使用其他非新表达式通过调用构造函数来创建对象。
结论:JS是基于原型的面向对象语言,没有类。生成对象的方式也不同于其他OO语言,采用原型来构造对象。
1.《js对象 JS和其他面向对象语言的区别》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《js对象 JS和其他面向对象语言的区别》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/1535889.html