面向对象概述
对象简介
JavaScript中的对象其实就是生活中对象的一个抽象。在使用上,对象是一组无序的相关属性和方法的集合。对象的作用是:封装信息。比如,我们保存一个值时会用变量,保存多个值时会用数组,但是我们讲过,数组中最好存放数据类型一致的数据。所以,如果我们需要封装多个类型不一致的数据时,可以使用对象。对象具有特征(属性)和行为(方法)。
由此,对象里面的属性均是键值对:
- 键:相当于属性名。
- 值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型,函数类型,对象等)。
当对象的属性值为函数时,我们称其为方法。方法用来表示对象的功能,也可以类比为现实生活中的行为。
var obj = {
sayHi: function () {
console.log(this.name);
}
};
console.log(obj.sayHi); //没加括号,就是获取方法
console.log('-----------');
console.log(obj.sayHi()); //加了括号,就是调用方法。即:执行函数内容,并执行函数体的内容
同样的,对象中的属性值也可以一个对象。
对象的分类
对象的分类
内置对象:
由ES标准中定义的对象,在任何的ES的实现中都可以使用比如:Object、Math、Date、String、Array、Number、Boolean、Function等。
宿主对象:
由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象。比如 BOM DOM。比如console、document。
自定义对象
由开发人员自己创建的对象
通过 new 关键字创建出来的对象实例,都是属于对象类型,比如Object、Array、Date等。
基本类型和引用类型数据存储的区别
基本类型又叫做值类型。值类型是简单数据类型,基本数据类型在存储时,变量中存储的是值本身,因此叫做值类型。而引用类型也叫复杂数据类型在存储时,变量中存储的仅仅是地址(引用),因此叫做引用数据类型。
基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。(我们再次强调一下,String其实是与基本数据类型相似的不可变引用类型)
引用数据类型(引用类型):Object 对象。
下面,我们来介绍两个概念:堆和栈
- 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收
基本数据类型存储
基本数据类型的值直接保存在栈内存中,值与值之间是独立存在,修改一个变量不会影响其他的变量。
对象存储
- 对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。
- 对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间。变量保存的是对象的内存地址(对象的引用)。换而言之,对象的值是保存在堆内存中的,而对象的引用(即变量)是保存在栈内存中的。
- 如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响。对于引用类型的数据,赋值相当于地址拷贝。两个变量时同一个引用时,他们的值是同一个值。也就是同一个对象。