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

相关推荐
程序员爱技术1 小时前
Vue 2 + JavaScript + vue-count-to 集成案例
前端·javascript·vue.js
并不会2 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
悦涵仙子2 小时前
CSS中的变量应用——:root,Sass变量,JavaScript中使用Sass变量
javascript·css·sass
衣乌安、2 小时前
【CSS】居中样式
前端·css·css3
兔老大的胡萝卜2 小时前
ppk谈JavaScript,悟透JavaScript,精通CSS高级Web,JavaScript DOM编程艺术,高性能JavaScript pdf
前端·javascript
低代码布道师2 小时前
CSS的三个重点
前端·css
耶啵奶膘3 小时前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^5 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie5 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic6 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js