1 引用数据类型
对象是一种特殊的数据, 看如下代码
示例
// 一. 定义一个学生类
function Student(n, a) {
this.uname = n;
this.age = a;
}
// 二. 实例化对象
var stu = new Student('xiaoming', 20);
- 这里并不是把所有的数据直接保存在变量中
- 而是先在堆区开辟一个空间, 把这个空间的引用保存在变量中.
- 在js中, 函数和对象都是引用数据类型
这里有个词--"引用"
什么是引用呢, 引用有什么用呢?
一句话解释: 引用就是来找数据的
类似于路径的概念, 就像我们可以通过路径E:docmentimageimg.jpg
找到电脑中的一个文件,
又或者酒店的房间号, 通过房间号就可以找到房间
通过引用就可以找到内存中的数据.
引用本质上是内存首地址. 通过这个地址就可以找到对应的内存空间, 进而获取数据
2 new实例化的过程
示例
// 一. 定义一个学生类
function Student(n, a) {
this.uname = n;
this.age = a;
}
// 二. 实例化对象
var stu = new Student('xiaoming', 20);
当代码执行到行7行时.
- 在堆内存中开辟一段内存空间, 假设这段内存空间是从
0x1111~0x2000
3
因此通过0x1111
就可以找到对应的这段内存空间, 进而获取其中的数据 - 将
0x1111
保存在this
中, 我们也可以说让this指向这个空间 - 执行函数. 通过
this=0x1111
找到内存空间, 在这个空间中保存数据name:xiaoming,age:20
- 最后, 将
0x1111
返回, 保存在stu中
练习
如果再实例化一个对象stu1, (假设内存地址是0x2222), 画出实例化的过程
// 一. 定义一个学生类
function Student(n, a) {
this.uname = n;
this.age = a;
}
// 二. 实例化对象
var stu = new Student('xiaoming', 20);
var stu1 = new Student('xiaomei', 18);
参考答案
这样, 我们就可以通过一个模板(Student构造函数)得到多个不同的对象(stu对象和stu1对象). 对象中保存的数据也不一样.