JavaScript 创建自定义对象的六种方式详解
本文系统梳理了 JavaScript 中创建自定义对象的六种核心方法,包括 Object 实例、对象字面量、工厂模式、构造函数模式、原型模式以及组合使用构造函数与原型模式。详细解析了各方法的实现原理、适用场景及优缺点,重点对比了构造函数与原型模式在内存共享与类型识别上的差异,帮助开发者根据实际需求选择最优方案。
第一种方式是通过实例化 Object 对象来创建。
var person = new Object();
person.name = "rose";
person.age = 18;
person.job = "actor";
person.sayName = function () {
console.log(this.name);
};
console.log(person);
第二种方式采用对象字面量语法进行定义。
var person = {
name: "rose",
age: 18,
job: "actor",
sayName: function () {
console.log(this.name);
},
};
console.log(person);
上述两种方法属于创建对象的基础手段,其原型均指向 Object。
第三种方式是工厂模式。
function createPerson(name,age,actor){
var person = new Object();
person.name = "rose";
person.age = 18;
person.job = "actor";
person.sayName = function () {
console.log(this.name);
};
return person
}
console.log(p1 instanceof Object);//true
console.log(p1 instanceof createPerson);//false
从代码可以看出,工厂模式的本质是利用函数封装逻辑,内部通过 new Object() 方式创建对象并返回。
该模式的优势在于能够便捷地批量生成结构相似的对象。
其局限性在于无法解决对象类型的识别问题,即难以判断一个对象的具体类型。
第四种方式是构造函数模式。
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function () {
console.log(this.name);
};
}
var p = new person("rose", 18, "actor");
console.log(p instanceof Person);//true
console.log(p instanceof Object);//true
构造函数用于创建特定类型的对象,如 Object 和 Array 等内置构造函数会在运行时自动存在于执行环境中。
构造函数模式与工厂模式的主要区别在于以下几点:
- 不显式地创建对象实例。
- 直接将属性和方法赋值给 this 对象。
- 省略了 return 语句。
使用构造函数创建对象时必须配合 new 操作符,该过程包含以下四个步骤:
- 首先创建一个新对象。
- 将 this 指向这个新创建的对象。
- 执行构造函数内的代码。
- 最终返回该对象。
构造函数模式的优点在于,通过它创建的对象在原型上会拥有一个 constructor 属性,该属性指向构造函数 Person,最初用于标识数据类型。
优化方案探讨。
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
function sayName(){
console.log(this.name);
}
var p = new person("rose", 18, "actor");
其缺点在于,当对象包含大量方法时,需要在多个全局作用域下定义函数,这不仅缺乏封装性,还导致全局作用域中函数过多。
第五种方式是原型模式。
function Person() {}
Person.prototype.name = "rose";
Person.prototype.age = 18;
Person.prototype.sayName = function () {
console.log(this.name);
};
var p = new Person();
console.log(p);
讨论原型模式需涉及原型链,原型与原型链的关系如下图所示:

在 prototype 上定义的所有属性均位于原型对象中。原型上的属性和方法属于公有属性和公有方法,所有实例均可访问这些内容。
第六种方式是组合使用构造函数模式和原型模式,这是最常用的方式。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayName = function () {
console.log(this.name);
};
var p = new Person("rose", 18);
console.log(p);

当对象引用其属性时,会沿原型链向上查找,直至找到 Object 的原型。
总结。
至此,关于 JavaScript 创建自定义对象的六种方法介绍完毕,更多相关内容请搜索本站历史文章或继续浏览后续文章,感谢支持!
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
