JavaScript 实现类的五种常见方式详解
本文详细解析 JavaScript 中实现类的五种主要方式:构造方法、工厂方法、原型链、混合方式以及动态原型模式。通过对比各方法的优缺点,如函数实例化开销与属性共享问题,帮助开发者根据实际需求选择最优的面向对象编程方案,掌握 JavaScript 核心设计模式。
构造方法
使用构造方法创建对象是 JavaScript 中最基础的方式。
具体代码实现如下:
function coder()
{
this.name = '现代魔法';
this.job = 'Web 开发者';
this.coding = function ()
{ alert('我正在写代码'); }
}
var coder = new coder();
alert(coder.name);
coder.coding();工厂方法
工厂方法通过返回对象实例来创建类,而非直接使用 new 关键字调用构造函数。
相关代码示例如下:
function createCoderFactory()
{
var obj = new Object();
obj.name = '现代魔法';
obj.job = '程序员';
obj.coding = function ()
{
alert('我正在写代码');
};
return obj;
}
var coder = createCoderFactory();
alert(coder.name);
coder.coding();
需要注意的是,工厂方法和构造方法存在一个共同的缺陷:每次创建新实例时,都会重新实例化该类中的每个函数,导致内存浪费。
原型链模式
原型链模式利用 prototype 属性来共享属性和方法,从而解决函数重复创建的问题。
其代码结构如下:
function coder(){}
coder.prototype.name = '现代魔法';
coder.prototype.job = '程序员';
coder.prototype.coding = function(){
alert('我正在写代码');
};
var coder = new coder();
alert(coder.name);
coder.coding();然而,原型链的主要缺点在于所有属性都是共享的。如果修改了一个实例的属性,其他实例也会随之改变,因为它们在原型上指向同一内存地址。例如:
演示代码如下:
var coder1 = new coder();
var coder2 = new coder();
alert(coder1.name); /*显示现代魔法*/
coder2.name = 'nowamagic';
alert(coder1.name); /*显示nowamagic*/
alert(coder2.name); /*这个也显示nowamagic*/混合方式
鉴于上述三种方法各有优劣,开发者通常采用混合方式来平衡性能与功能。
这种改进方案结合了构造方法和原型链的优点。
具体实现代码如下:
function coder()
{
this.name = '现代魔法';
this.job = '程序员';
}
coder.prototype.coding = function(){
alert('我正在写代码');
};动态原型模式
动态原型模式旨在解决前几种方法的局限性,通过条件判断来动态初始化原型方法。
以下是该模式的代码实现:
function coder()
this.name = '现代魔法';
{
this.job = '程序员';
if (typeof(coder._init) == 'undefined')
this.coding = function ()
{
alert('我正在写代码');
{
this._init = true;
};
复制代码
}
}什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
