JavaScript中创建对象的五种方式详解

作者:拾光

时间:2026-10-26

浏览:573

本文深入解析JavaScript中创建对象的五种主要方式,包括工厂模式、构造函数模式、原型模式、混合构造函数/原型模式以及动态原型方法。通过对比各模式的优缺点,重点推荐ECMAScript推荐的混合模式,并探讨如何实现更好的封装与性能平衡。

文章目录
工厂方式

JavaScript对象创建概述

在JavaScript中,创建并返回特定类型的对象是基础操作。



具体实现代码如下:

 
function createCar(sColor,iDoors,iMpg){
var oTempCar=new Object();
oTempCar.color=sColor;
oTempCar.doors=iDoors;
oTempCar.mpg=iMpg;
oTempCar.showColor=function(){
alert(this.color);
} 
return oTempCar;
} 

工厂模式

调用示例如下:


具体代码为:

 
var oCar1=createCar("red",4,23);
var oCar2=createCar("blue",3,25);
oCar1.showColor();
oCar2.showColor();

该方式的主要缺点在于方法被重复创建。例如在上述调用中,oCar1和oCar2各自拥有独立的showColor方法,但实际上这些方法是可以共享的,造成了内存浪费。



构造函数方式

构造函数模式

改进示例如下:



代码实现为:

 
function Car(sColor,iDoors,iMpg){
this.color=sColor;
this.door=iDoors;
this.mpg=iMpg;
this.showColor=function(){
alert(this.color);
} 
} 

调用示例如下:


代码如下:

 
var oCar1=new Car("red",4,23);
var oCar2=new Car("blue",3,25);

此方式存在与工厂模式相同的缺点,即方法在每次实例化时都被重复创建,导致内存效率低下。



原型方式

原型模式

利用对象的prototype属性可以解决此问题,该属性被视为创建新对象所依赖的原型。通过空构造函数定义类名,并将所有属性和方法直接赋予prototype属性,重写前的示例代码如下:



代码示例如下:

 
function Car(){
} 
Car.prototype.color="red";
Car.prototype.doors=4;
Car.prototype.mpg=23;
Car.prototype.showColor=function(){
alert(this.color);
} 


调用方式如下:


代码如下:

 
var oCar1=new Car();
var oCar2=new Car();

该方式的局限性在于无法通过向构造函数传递参数来初始化属性值。



混合的构造函数/原型方式

混合构造函数/原型模式

结合使用构造函数和原型方式,示例如下:



代码实现如下:

 
function Car(sColor,iDoors,iMpg){
this.color=sColor;
this.door=iDoors;
this.mpg=iMpg;
} 
Car.prototype.showColor=function(){
alert(this.color);
} 

调用示例如下:


代码如下:

 
var oCar1=new Car("red",4,23);
var oCar2=new Car("blue",3,25);

其优点在于既避免了内存浪费,又保持了创建的便捷性。



这种混合方式是ECMAScript中采用的主要对象创建方式。



动态原型方法

动态原型方法

尽管混合构造函数/原型方式将方法定义在对象外部,导致视觉封装感不足,不够“面向对象”,因此衍生出了动态原型方法:



代码实现如下:

 
function Car(sColor,iDoors,iMpg){
this.color=sColor;
this.door=iDoors;
this.mpg=iMpg;
if(typeof Car._initialized=="undefined"){
Car.prototype.showColor=function(){
alert(this.color);
}; 
Car._initialized=true;
} 
} 

作者:Artwl


出处:http://artwl.cnblogs.com

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章