构造函数模式通过函数定义对象结构,使用new创建实例,如Person构造函数生成person1和person2;new操作会创建新对象、绑定this、关联原型并执行构造逻辑;方法定义在prototype上可避免内存浪费;ES6的class是其语法糖,本质仍基于原型机制。

JavaScript 中的构造函数模式是一种创建对象的方式,它利用函数作为对象的模板,通过 new 关键字来生成实例。这种模式适合需要创建多个具有相同结构和行为的对象场景。
什么是构造函数
构造函数本质上是一个普通函数,但有以下特点:
- 函数名通常首字母大写(约定俗成,便于识别)
- 内部使用 this 指向即将创建的实例
- 通过 new 操作符调用,生成新对象
function Person(name, age) {
this.name = name;
this.age = age;
this.greet = function() {
console.log("你好,我是" + this.name);
};
}
const person1 = new Person("小明", 25);
person1.greet(); // 输出:你好,我是小明
new 操作符做了什么
当你使用 new 调用构造函数时,JavaScript 引擎会自动执行以下步骤:
- 创建一个全新的空对象
- 将这个新对象的原型(__proto__)指向构造函数的 prototype
- 将构造函数内部的 this 绑定到这个新对象
- 执行构造函数中的代码(为对象添加属性和方法)
- 如果构造函数没有返回其他对象,则返回这个新对象
构造函数的问题与优化
直接在构造函数中定义方法(如上面的 greet)会导致每个实例都创建一份独立的方法副本,浪费内存。
解决办法是将方法挂载在 prototype 上:
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log("你好,我是" + this.name);
};
const person1 = new Person("小明", 25);
const person2 = new Person("小红", 23);
console.log(person1.greet === person2.greet); // true,共用同一个方法
现代替代方案
ES6 引入了 class 语法,它是构造函数的语法糖,更清晰易读:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log("你好,我是" + this.name);
}
}
底层依然是基于原型和构造函数机制。
基本上就这些。构造函数模式是理解 JavaScript 面向对象编程的基础,掌握它有助于深入理解对象创建、原型链和继承机制。









