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

相关推荐
奇迹_h7 分钟前
打造你的HTML5打地鼠游戏:零基础入门实践
前端
SuperEugene10 分钟前
Vue生态精选篇:Element Plus 的“企业后台常用组件”用法扫盲
前端·vue.js·面试
Neptune113 分钟前
JavaScript回归基本功之---类型判断--typeof篇
前端·javascript·面试
贾铭14 分钟前
如何实现一个网页版的剪映(三)使用fabric.js绘制时间轴
前端·后端
进击的尘埃24 分钟前
微前端沙箱隔离:qiankun 和 wujie 到底在争什么
javascript
子兮曰1 小时前
后端字段又改了?我撸了一个 BFF 数据适配器,从此再也不怕接口“屎山”!
前端·javascript·架构
万少3 小时前
使用Trae轻松安装openclaw的教程-附带免费token
前端·openai·ai编程
颜酱4 小时前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
浪浪山_大橙子4 小时前
OpenClaw 十分钟快速,安装与接入完全指南 - 推荐使用trae 官方 skills 安装
前端·人工智能
忆江南4 小时前
iOS 可视化埋点与无痕埋点详解
前端