我刚刚接触JavaScript
的时候一直有一个疑惑,就是JavaScript
到底是不是面向对象的语言,它跟别的面向对象的语言比较起来,有点怪怪的,JavaScript
有对象,但是跟别的语言相比没有类,JavaScript
对象可以自由添加属性,其他语言不可以,给我的感觉像是不纯正的面向对象的语言,不知道大家刚刚开始学的时候有没有这个疑惑,现在我会肯定的说,JavaScript
就是面向对象语言。
Object 对象
咱们首先来看看什么是对象(当然不是女朋友,如果真想要就new一个吧)。
对象这个词是英文翻译过来的,所以我们理解起来就会相对困难一些。
Object在英文中的意思
在英文中,"object" 这个词有多个意思,具体的含义取决于上下文。以下是一些可能的含义:
- 物体或对象: "Object" 可以指代在现实生活中存在的实体,比如桌子、椅子、书等。这是其最基本的常规意义。
- 目标或目的: "Object" 也可以表示一个目标、目的或计划中的事物。例如,"the object of the game" 意味着游戏的目标。
- 对象(在编程中): 在计算机科学和编程领域,"object" 通常指代面向对象编程中的实体,具有属性和方法。
- 宾语(语法): 在语法学中,"object" 是动词的宾语,表示动作的接受者或受益者。例如,在句子 "I read a book." 中,"a book" 就是动词 "read" 的宾语。(最后一个就不看了,就当学习了一个英语语法知识点)
我们把前两点总结一下,也就是一切事物的总称,在结合第三点来理解这个对象一词在编程中的含义会更轻松一些。
JavaScript的对象
在面向对象编程中,对象具有以下特征:
-
属性(Attributes):
- 属性是对象的状态或数据成员。它们描述了对象的特征或属性。
- 也被称为字段、成员变量或实例变量。
- 例如,对于一个表示汽车的对象,属性可以包括颜色、速度、制造商等。
-
方法(Methods):
- 方法是对象的行为或操作。它们描述了对象能够执行的操作。
- 也被称为函数、成员函数或操作。
- 例如,对于表示汽车的对象,方法可以包括启动、停止、加速等操作。
-
状态(State):
- 对象的状态是由其属性的当前值定义的。
- 通过改变属性的值,对象的状态可以在其生命周期中发生变化。
-
行为(Behavior):
- 对象的行为是由其方法定义的。
- 通过调用方法,对象可以执行特定的操作或行为。
-
标识性(Identity):
- 对象具有唯一的标识,使得它可以在程序中被识别和区分。
- 通常由对象的内存地址或唯一标识符表示。
-
封装性(Encapsulation):
- 封装是一种将属性和方法组合在一起的机制,以防止对对象内部实现的直接访问。
- 只有通过对象的公共接口(方法)才能访问对象的内部状态。
-
可见性(Visibility):
- 可见性指定了对象的属性和方法对外部世界的可见程度。
- 通常有私有(private)、受保护(protected)和公共(public)等级别。
-
抽象性(Abstraction):
- 抽象性是隐藏对象的复杂性并显示关键特征的概念。
- 通过抽象,程序员可以专注于对象的重要方面,而忽略不必要的细节。
这些总结一下也就是对象的特征主要有:1. 对象具有唯一标识性。 2. 对象具有状态。 3. 对象具有行为。 咱们根据这个来分析一下JavaScript
。
1.对象具有唯一标识性
js
var a1 = { b: 1 };
var a2 = { b: 1 };
console.log( a1 === a2}; // false
a1
和 a2
看起来是一模一样的,但是打印结果是false
。一般来说,各种语言的对象的唯一标识性都是通过内存地址来表现的,对象具有唯一标识的内存地址也就具有了唯一标识。
2.第二点对象具有状态和第三点对象具有行为。在JavaScript
中,将状态和行为都抽象为属性
js
const a = {
d: 1,
fun() {
console.log(1);
}
}
在这段代码中,d
和 fun
都是对象a
的属性。在别的语言中,比如Java
中,用属性来表示状态,用方法来表示行为,JavaScript
虽然只有属性,但是只是写法不同,他也是可以表示对象的状态和行为。
所以说,JavaScrip
具有面向对象编程的特征,那么毫无疑问他就是面向对象的语言,只不过就是各个语言实现方式不同而已。大家只是先学习了别的语言,把在学习别的语言中理解的对象的概念先入为主了。