JavaScript创建对象与模拟类的几种方式详解
本文详细解析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什么时候该用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
