首先,计算机有四大内存。
四大内存
1 栈
(1)函数执行开辟栈,函数执行结束后,栈会被自动销毁。
(2)函数执行开辟栈,函数中的局部变量是创建在栈中的(局部变量在栈中),函数执行结束后,栈会被自动销毁,所以局部变量也会被销毁。
2 堆
(1) js语言中,对象都是保存在堆中的。堆中的内存是没有名字的,每个对象都没有名字,但是每个对象都有一个引用值,不是同一个对象,则引用值不相同,所以引用值成为了对象的唯一标识。
(2) 引用类型变量: 保存对象引用值的变量就是引用类型变量,常常说成引用类型变量指向对象。当对象没有引用类型变量指向时,对象会被垃圾回收机制(GC)自动销毁。
(3) 内存泄漏:对象有引用类型变量指向它,但是程序执行中又不再使用该引用类型变量(对象)
3 数据段
(1) 数据段内存,一但创建就永不销毁。数据段内存是全局的,所以任何地方都可以访问到数据段中的内存。
(2)window变量就是属于数据段中的内存。所以任何地方都可以访问window
(3)window变量是一个引用类型变量,保存的是窗口对象的引用值,也可以说window变量指向窗口对象。
(时常说: window对象---window变量指向的对象)
4 代码段
保存代码的内存,js不用关注。
函数:
(1) 函数执行开辟栈,函数执行结束后,栈会被自动销毁。
(2) 函数执行开辟栈,函数中的局部变量是创建在栈中的(局部变量在栈中),函数执行结束后,栈会被自动销毁,所以局部变量也会被销毁。
(3) 函数的局部变量:函数运行过程中产生的变量, 函数的参数也是局部变量
4)函数本身也是对象。 说明函数除了有对象的功能之外,还有别的功能。
原型对象
1. 定义:原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
2. 利用原型特点和概念,可以提取共有属性
3. 对象如何查看对象的构造函数-->constructor
4. 对象如何查看原型-->隐式属性__proto__
【定义】原型:原型是一个对象,是函数的一个属性prototype; 通过该函数实例化出来的对象都可以继承得到原型上的所有属性和方法
【解析】原型对象默认有一个属性constructor ,值为对应的构造函数;另外,有一个属性__proto__,值为Object.prototype
且,原型链的终点为 null
– 通常来讲我们把null看成他自有类型的唯一成员;
- 作为函数的参数,表示该函数的参数不是对象。
- 作为对象原型链的终点。
【总结】一个对象的原型__proto__ 就是它构造函数的prototype