当前位置:首页 > 时尚生活

js对象 JS和其他面向对象语言的区别

什么是面向对象?

在我们开始区分差异之前,我们应该简单地梳理一下面向对象和面向对象的概念

目标

现实世界中,随处可见的一个东西就是物体,物体就是事物存在的实体,比如人、桌子、电脑、高楼等等。人类解决问题的方式总是把复杂的事情简单化,所以会思考这些物体是由什么部分组成的。一般来说,一个对象分为两部分,即动态部分和静态部分。静态部分,顾名思义,是不可移动的部分,称为“属性”。任何物体都会有自己的属性,比如人,包括身高、胖瘦、性别、年龄等属性。然而,一个具有这些属性的人会做出什么样的动作,也是一个值得探讨的部分。这个人会哭,会笑,会说话,会走路,这些都是这个人所具有的行为(动态部分)。人类可以通过讨论物体的属性和观察其行为来理解物体。

总之:在现实世界中,所有可见的、有形的物体都是物体,每个物体都有自己的属性和行为。

面向对象是一种软件开发方法(面向对象编程)

面向对象是一种理解和抽象现实世界的方法,是计算机编程技术发展到一定阶段的产物。

面向对象的基本思想是使用类, 对象, 继承, 封装, 消息等基本概念进行程序设计.在系统构造中尽可能的利用人类的自然思维方式,强调以现实世界中的事物(对象)为中心来思考,认识问题,并根据这些事物的本质特征,把它们抽象表示为系统中的类.这使得软件系统的组件可以直接的映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌.

面向对象方法的三个基本特征:

封装性: 将对象的实现细节隐藏起来,通过一些公共的接口方法来供外部调用对象的功能 (体现出了隐藏细节和代码重用这两个特点)继承性: 是面向对象实现的的重要手段,子类继承父类,子类直接获得父类的非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

上一篇

罗志祥自曝想和木村拓哉一起睡觉 和木村成为好朋友

下一篇

小屏手机推荐2019 2019年了,还有几款小屏手机值得入手呢

13年从未放弃电影《亲爱的》原型至今仍在寻子

13年从未放弃电影《亲爱的》原型至今仍在寻子

十三年前的2007年10月9日,孙海洋4岁儿子孙卓在深圳被拐,持续寻子13年,他的故事被改编成电影《亲爱的》。孙海洋一家从湖北来到深圳谋生,就在深圳开了一间包子铺,可是,就在包子铺开业的第七天,孙海洋忙完找不到自己...

黄晓明宋祖儿现身春晚语言类节目终审现场 包裹严实

黄晓明宋祖儿现身春晚语言类节目终审现场 包裹严实

2020年春晚在即,各类彩排审查如火如荼,昨日,央视春晚语言类审查彩排结束,媒体拍到从演播厅走出的宋祖儿和黄晓明 。宋祖儿黄晓明  照片中,宋祖儿包裹严实很保暖,黄晓明口罩帽子遮面十分低调。...

刘镇华 文人当了土匪头子,《白鹿原》刘瞎子原型刘镇华

刘镇华 文人当了土匪头子,《白鹿原》刘瞎子原型刘镇华

白鹿原上的军阀刘瞎子 最近,根据陈同名小说改编的热门电视剧《白鹿原》引起了热烈的讨论。在我看来,这部剧的拍摄还是很用心的,演员的表现也很出色。当然,考证不严谨是国内影视剧普遍存在的问题,这部剧也无法免俗,史实上还有很多...

元载原型 《长安》元载原型:干掉李辅国,偷看密旨,被赐死时富可敌国

  • 元载原型 《长安》元载原型:干掉李辅国,偷看密旨,被赐死时富可敌国
  • 元载原型 《长安》元载原型:干掉李辅国,偷看密旨,被赐死时富可敌国
  • 元载原型 《长安》元载原型:干掉李辅国,偷看密旨,被赐死时富可敌国

猪八戒的脊梁 《西游记》对当时社会有什么意义?《西游记》的讽刺对象是谁?

  • 猪八戒的脊梁 《西游记》对当时社会有什么意义?《西游记》的讽刺对象是谁?
  • 猪八戒的脊梁 《西游记》对当时社会有什么意义?《西游记》的讽刺对象是谁?
  • 猪八戒的脊梁 《西游记》对当时社会有什么意义?《西游记》的讽刺对象是谁?
动画版白雪公主原型去世 事件的真相是什么?

动画版白雪公主原型去世 事件的真相是什么?

由于这两天动画版白雪公主原型去世在网上的关注热度是相当之高的,很多小伙伴或许也都在关注动画版白雪公主原型去世,那么这当中当然还是有部分的小伙伴们并不太了解动画版白雪公主原型去世,那么没有关系,如果说大家现在想要了解动画...

德国禄来 德国禄来相机工厂倒闭:21台原型机拍卖

  • 德国禄来 德国禄来相机工厂倒闭:21台原型机拍卖
  • 德国禄来 德国禄来相机工厂倒闭:21台原型机拍卖
  • 德国禄来 德国禄来相机工厂倒闭:21台原型机拍卖

陪你到世界之巅游戏原型

  • 陪你到世界之巅游戏原型
  • 陪你到世界之巅游戏原型
  • 陪你到世界之巅游戏原型