一、构造函数与对象的联系
在 JavaScript 中 , 构造函数 与 对象 之间 是 描述 与 实例 之间的关系 ;
- 构造函数 是 用来创建特定类型对象的函数 ;
- 对象 是 根据 构造函数 实例化出来的具体实例 ;
构造函数 抽象了 对象的公共部分 , 将 属性 和 方法 封装到了 构造函数中 , 可以理解为 面向对象 中的 类 ;
对象 指的是 某一个特定的实例化值 ;
二、new 操作符执行过程分析
1、使用 new 构造函数() 创建对象过程
在上一篇博客 【JavaScript】对象 ③ ( 使用 new Object 创建对象 | 使用 构造函数 创建对象 | 构造函数语法 | 使用 字面量 和 new Object 创建对象的方法弊端 ) 中 , 讲解了 构造函数的使用流程 ,
首先 , 定义构造函数 ;
代码语言:javascript复制// 1. 定义构造函数
function Person(uname, age) {
// 2. 在构造函数内部定义属性和方法
this.uname = uname;
this.age = age;
this.hello = function() {
console.log( this.uname " is " this.age " years old");
};
}
然后 , 使用 new 操作符 调用构造函数 , 创建对象 ;
代码语言:javascript复制// 3. 使用 new 操作符调用构造函数,创建对象
var person = new Person('Tom', 18);
2、new 操作符执行过程
new 操作符 的 主要作用就是 创建一个新的对象实例 , 这个 对象实例 会继承构造函数的 prototype
对象 , 并 执行 构造函数 中的代码 , 来初始化新对象的属性和方法 , 下面详细分析 new 操作符 的执行过程 ;
new 操作符 创建对象 的执行过程 如下 :
- 首先 , 创建空对象 , 使用 new 操作符 调用 构造函数 , 可以 在 内存空间 中 , 创建一个 空对象 ;
- 然后 , this 指针指向对象 , 将 构造函数 中的 this 指针指向该 空对象 ;
- 新创建的 空对象 的
__proto__
会被链接到 构造函数 的prototype
对象 , 该 空对象 就可以 访问 在 构造函数 中 定义的 属性和方法 ;
- 新创建的 空对象 的
- 再后 , 设置属性和方法 , 执行 构造函数 中的代码 , 为 空对象 设置 属性 和 方法 ;
- this 关键字 在 构造函数 内部被设置为新创建的对象 , 之后 执行构造函数的代码 , 给新对象添加属性和方法 ;
- 最后 , 返回创建的对象 , 将 内存空间 中 创建的对象返回 , 一般是赋值给 var / let 关键字声明的变量 ;
- new 关键字 可以 将 创建的对象直接返回 , 因此 构造函数 中 不需要 return 语句 ;
- 如果构造函数 没有 显式地 返回一个对象 , new 操作符 会自动返回新创建的对象 ;
- 如果构造函数 确实 显式地 返回了一个 返回值 , 那么这个返回值会被 new 操作符 返回 ;
- new 关键字 可以 将 创建的对象直接返回 , 因此 构造函数 中 不需要 return 语句 ;