JavaScript到底是不是面向对象的语言?

我刚刚接触JavaScript的时候一直有一个疑惑,就是JavaScript到底是不是面向对象的语言,它跟别的面向对象的语言比较起来,有点怪怪的,JavaScript有对象,但是跟别的语言相比没有类,JavaScript对象可以自由添加属性,其他语言不可以,给我的感觉像是不纯正的面向对象的语言,不知道大家刚刚开始学的时候有没有这个疑惑,现在我会肯定的说,JavaScript就是面向对象语言。

Object 对象

咱们首先来看看什么是对象(当然不是女朋友,如果真想要就new一个吧)。

对象这个词是英文翻译过来的,所以我们理解起来就会相对困难一些。

Object在英文中的意思

在英文中,"object" 这个词有多个意思,具体的含义取决于上下文。以下是一些可能的含义:

  1. 物体或对象: "Object" 可以指代在现实生活中存在的实体,比如桌子、椅子、书等。这是其最基本的常规意义。
  2. 目标或目的: "Object" 也可以表示一个目标、目的或计划中的事物。例如,"the object of the game" 意味着游戏的目标。
  3. 对象(在编程中): 在计算机科学和编程领域,"object" 通常指代面向对象编程中的实体,具有属性和方法。
  4. 宾语(语法): 在语法学中,"object" 是动词的宾语,表示动作的接受者或受益者。例如,在句子 "I read a book." 中,"a book" 就是动词 "read" 的宾语。(最后一个就不看了,就当学习了一个英语语法知识点)

我们把前两点总结一下,也就是一切事物的总称,在结合第三点来理解这个对象一词在编程中的含义会更轻松一些。

JavaScript的对象

在面向对象编程中,对象具有以下特征:

  1. 属性(Attributes):

    • 属性是对象的状态或数据成员。它们描述了对象的特征或属性。
    • 也被称为字段、成员变量或实例变量。
    • 例如,对于一个表示汽车的对象,属性可以包括颜色、速度、制造商等。
  2. 方法(Methods):

    • 方法是对象的行为或操作。它们描述了对象能够执行的操作。
    • 也被称为函数、成员函数或操作。
    • 例如,对于表示汽车的对象,方法可以包括启动、停止、加速等操作。
  3. 状态(State):

    • 对象的状态是由其属性的当前值定义的。
    • 通过改变属性的值,对象的状态可以在其生命周期中发生变化。
  4. 行为(Behavior):

    • 对象的行为是由其方法定义的。
    • 通过调用方法,对象可以执行特定的操作或行为。
  5. 标识性(Identity):

    • 对象具有唯一的标识,使得它可以在程序中被识别和区分。
    • 通常由对象的内存地址或唯一标识符表示。
  6. 封装性(Encapsulation):

    • 封装是一种将属性和方法组合在一起的机制,以防止对对象内部实现的直接访问。
    • 只有通过对象的公共接口(方法)才能访问对象的内部状态。
  7. 可见性(Visibility):

    • 可见性指定了对象的属性和方法对外部世界的可见程度。
    • 通常有私有(private)、受保护(protected)和公共(public)等级别。
  8. 抽象性(Abstraction):

    • 抽象性是隐藏对象的复杂性并显示关键特征的概念。
    • 通过抽象,程序员可以专注于对象的重要方面,而忽略不必要的细节。

这些总结一下也就是对象的特征主要有:1. 对象具有唯一标识性。 2. 对象具有状态。 3. 对象具有行为。 咱们根据这个来分析一下JavaScript

1.对象具有唯一标识性

js 复制代码
var a1 = { b: 1 };
var a2 = { b: 1 };
console.log( a1 === a2}; // false

a1a2 看起来是一模一样的,但是打印结果是false。一般来说,各种语言的对象的唯一标识性都是通过内存地址来表现的,对象具有唯一标识的内存地址也就具有了唯一标识。

2.第二点对象具有状态和第三点对象具有行为。在JavaScript中,将状态和行为都抽象为属性

js 复制代码
const a = {
    d: 1,
    fun() {
        console.log(1);
    }
}

在这段代码中,dfun 都是对象a的属性。在别的语言中,比如Java中,用属性来表示状态,用方法来表示行为,JavaScript虽然只有属性,但是只是写法不同,他也是可以表示对象的状态和行为。

所以说,JavaScrip具有面向对象编程的特征,那么毫无疑问他就是面向对象的语言,只不过就是各个语言实现方式不同而已。大家只是先学习了别的语言,把在学习别的语言中理解的对象的概念先入为主了。

相关推荐
IT专家-大狗1 分钟前
Google Chrome Canary版官方下载及安装教程【适用于开发者与进阶用户】
开发语言·javascript·chrome·ecmascript
we19a0sen2 小时前
npm 常用命令及示例和解析
前端·npm·node.js
倒霉男孩4 小时前
HTML视频和音频
前端·html·音视频
喜欢便码4 小时前
JS小练习0.1——弹出姓名
java·前端·javascript
chase。4 小时前
【学习笔记】MeshCat: 基于three.js的远程可控3D可视化工具
javascript·笔记·学习
暗暗那4 小时前
【面试】什么是回流和重绘
前端·css·html
小宁爱Python5 小时前
用HTML和CSS绘制佩奇:我不是佩奇
前端·css·html
weifexie5 小时前
ruby可变参数
开发语言·前端·ruby
千野竹之卫5 小时前
3D珠宝渲染用什么软件比较好?渲染100邀请码1a12
开发语言·前端·javascript·3d·3dsmax