JavaScript 实现类的五种常见方式详解

作者:闭包旅人时间:2026-10-27 10:01:19浏览:184

本文详细解析 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;
        };
复制代码
    }
}
作者最新文章