JavaScript创建对象与模拟类的几种方式详解

作者:闭包旅人

时间:2026-10-27

浏览:433

本文详细解析JavaScript中创建对象的多种机制。重点介绍对象字面量定义的局限性,以及利用function关键字模拟类的构造函数模式。同时探讨在函数体内创建并返回对象实例的工厂模式,分析各方式在属性访问、内存复用及IDE智能提示方面的差异,帮助开发者根据场景选择合适方案。

文章目录

JavaScript对象基础与字面量定义

在JavaScript中,创建对象(Create Object)的概念并不完全等同于传统面向对象语言中的“创建类实例”。JS中的对象本质上是一种复合数据类型,其创建过程及属性访问方式具有极高的灵活性。



JS对象属于复合类型,允许通过变量名进行存储和访问。从结构上看,对象是一个无序的属性集合,每个属性由键名和对应的值组成,这与哈希表、字典或键值对(Key-Value Pair)的概念相似。属性的值可以是内置类型(如 number、string),也可以是另一个对象。


一、由一对大括号括起来

代码如下:

 
var emptyObj = {};
var myObj =
{ 
'id': 1, //属性名用引号括起来,属性间由逗号隔开
'name': 'myName'
}; 
//var m = new myObj(); //不支持

观察上述代码,对象均使用 var 关键字声明。这种简单的对象字面量声明方式仅生成一个唯一的实例,不支持使用 new 操作符进行“实例化”,如代码注释所示。这种方式严重限制了对象的重用性,除非业务场景确实只需要单一实例,否则建议采用其他创建方式。


接下来介绍如何访问对象的属性和方法。


代码如下:

 
var myObj =
{ 
'id': 1,
'fun': function() {
document.writeln(this.id + '-' + this.name);//以"对象.属性"方式访问
}, 
'name': 'myObj',
'fun1': function() {
document.writeln(this['id'] + '+' + this['name']);//以集合方式访问
} 
}; 
myObj.fun();
myObj.fun1();
// 结果
// 1-myObj 1+myObj

二、用 function 关键字模拟 class

在函数内部,可以使用 this 关键字引用当前所属对象,从而通过属性赋值来定义对象成员。需要注意的是,若在函数内部使用 var 声明变量,该变量仅为局部变量,仅在定义该函数的作用域内有效,无法作为对象属性被外部访问。


使用构造函数模拟类

代码如下:

 
function myClass() {
this.id = 5;
this.name = 'myclass';
this.getName = function() {
return this.name;
} 
} 
var my = new myClass();
alert(my.id);
alert(my.getName());
// 结果
// 5
// myclass

三、在函数体中创建一个对象,声明其属性再返回

利用函数体创建对象时,可以采用上述字面量方法,或者先调用 new Object() 创建空对象,再逐个为属性赋值。


值得注意的是,使用这种构造函数方式创建的对象,在 VS2008 SP1 等早期开发环境中可能无法获得智能代码提示功能。


工厂模式:函数内创建并返回对象

代码如下:

 
function myClass() {
var obj =
{ 
'id':2,
'name':'myclass'
}; 
return obj;
} 
function _myClass() {
var obj = new Object();
obj.id = 1;
obj.name = '_myclass';
return obj;
} 
var my = new myClass();
var _my = new _myClass();
alert(my.id);
alert(my.name);
alert(_my.id);
alert(_my.name);
// 结果
// 2
// myclass
// 1
// _myclass

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章