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_陈寒3 分钟前
用了Proxy才发现以前的JavaScript白写了
前端·人工智能·后端
爱丶不疚37 分钟前
Eval: Agent 说的 Eval 是什么?从单测、TDD 到 Sentry 聊起
前端·ai编程·vibecoding
求道於盲39 分钟前
python中的类型标注
前端
计算机魔术师42 分钟前
从硅谷测试到全球铺开,ChatGPT广告的10亿美元秘密
前端
专业抄代码选手2 小时前
08|Fiber 上的 `useState`:状态终于属于具体组件
前端·javascript·react.js
默_笙2 小时前
😭 Vibe Coding 翻车实录:AI 编程为什么必须先写"剧本"
前端·javascript
LEE2 小时前
原来 Claude Code 最厉害的工具,一行代码都不写
前端·后端
parade岁月2 小时前
为了给表格加虚拟滚动而选了 vxe-table?也可以考虑下这个
前端·vue.js
打呵欠的猫2 小时前
一个 Hook 让 AI 每次写文件前自动检查编码规范,违规代码再也提交不进来
前端·ai编程·代码规范
恋猫de小郭2 小时前
Android 17 + OkHttp 5.5.0 ,全新 ECH 下你的 HTTPS 域名可以请求时被安全隐藏
android·前端·flutter