章节索引 :

new 运算符与构造函数

当一个函数被 new 运算符调用的时候,这个函数就会被称为构造函数。

任何函数都能被 new 运算符调用,但是一般会从设计上将一个函数考虑为构造函数,提供给 new 运算符调用。

function Human(name, gender) {
  this.name = name;
  this.gender = gender;
}

var human = new Human();

1. 构造函数的作用

构造函数的主要作用是用于生成对象。

有其他面向对象语言开发经验的同学可能会觉得使用 new 运算符的语法和创建类的实例很像,其实本质是不一样的。

结合原型的特性,在 JavaScript 中也能实现类似于类的一套机制。

关于构造函数和原型的处理关系,原型章节已经有详细介绍,具体内容可以参考原型章节。

2. new 运算符的运算机制

使用 new 运算符调用函数的时,背后有一套运行机制,这套机制说明了构造函数是怎么产生对象的。

当 new 运算符调用函数时,大致会进行以下几个操作:

  1. 创建一个空对象
  2. 将函数的this指向这个空对象
  3. 执行函数
  4. 如果函数没有指定返回值,则直接返回 this(一开始创建的空对象),否则返回指定返回值
function Person(name, gender, age) {
  this.name = name;
  this.gender = gender;
  this.age = age;
}

var person = new Person('小明', '男', 17);

console.log(person.name);

这样就能理解为什么使用 new 操作符可以生成对象了。

这个机制也是面试的高频题。

3. 小结

构造函数用于生成对象,理解构造函数和原型机制非常重要,不但是面试中的高频题,也可以提升编写高质量、可复用的代码的能力。

前置知识
什么是JavaScript 开发与学习环境准备 调试方案
基础
JavaScript 变量 JavaScript 数据类型 JavaScript if 语句 JavaScript for 语句 JavaScript 算数运算符 JavaScript 比较运算符 JavaScript 逻辑运算符 JavaScript 表达式 JavaScript 函数 JavaScript 对象 JavaScript 字符串 JavaScript 数字 JavaScript 数组 JavaScript switch 语句 JavaScript while 语句 JavaScript break与continue JavaScript with document.cookie
内置对象
JavaScript Function JavaScript Math JavaScript Date JavaScript RegExp JavaScript JSON
JavaScript 与 DOM
什么是DOM DOM和JavaScript的关系 获取和操作 DOM 节点 JavaScript DOM与事件 JavaScript DOM 事件绑定 JavaScript DOM 事件对象 JavaScript DOM 事件流 JavaScript DOM 事件优化 JavaScript DOM 自定义事件
表单处理
使用 JavaScript 校验表单
BOM
BOM window 对象 常用的 BOM 相关对象 BOM 常用属性和方法
AJAX
JavaScript AJAX
进阶知识
JavaScript 异常处理 JavaScript 三元运算符 JavaScript 逗号操作符 JavaScript void JavaScript typeof JavaScript delete JavaScript debugger JavaScript getter &setter JavaScript 原型 JavaScript new操作符和构造函数 JavaScript instanceof JavaScript this JavaScript 严格模式 JavaScript 作用域 JavaScript 闭包 JavaScript 变量提升 JavaScript 对象包装器
常用库
jQuery Lodash moment.js swiper
进阶指南
ECMAScript6 Node.js Babel CSS 预处理器 代码规范 TypeScript Web Components 小程序 Vue / React / Angular JavaScript 关键字
常见疑点与误区
分号问题 对象属性访问问题 this 使用问题 浮点数精度问题 独一无二的 NaN 避免全局污染 控制台观察对象问题 根据环境选择语言特性
扩展
相关资源