JavaScript对象创建:7种模式深度解析
174 浏览量
更新于2024-08-30
收藏 104KB PDF 举报
本文主要介绍了JavaScript中创建对象的七种模式,包括传统的Object构造函数、对象字面量、工厂模式、构造函数模式、原型模式、动态原型模式以及寄生构造函数模式。
在JavaScript中,对象是由属性和方法组成的无序集合,可以看作是键值对的数据结构。创建自定义对象的最基础方式是通过`new Object()`实例化一个空对象,然后逐一添加属性和方法。例如:
```javascript
var person = new Object();
person.name = "liubei";
person.age = 29;
person.job = "shayemuyou";
person.sayName = function() {
alert(this.name);
}
```
另一种常见的创建对象的方式是使用对象字面量,这种方法更简洁:
```javascript
var person = {
name: "liubei",
age: 29,
job: "shayemuyou",
sayName: function() {
alert(this.name);
}
}
```
然而,当需要创建多个具有相同接口的对象时,重复代码问题显现。工厂模式应运而生,它是一个函数,负责创建具有特定接口的对象:
```javascript
function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function() {
alert(this.name);
}
return o;
}
var per = createPerson("liubei", 29, "shayemuyou");
```
1. 构造函数模式:构造函数用于初始化新创建的对象,通过`new`关键字调用。例如:
```javascript
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function() {
alert(this.name);
}
}
var per = new Person("liubei", 29, "shayemuyou");
```
2. 原型模式:通过修改对象的原型(`__proto__`或`prototype`)来添加方法,所有实例共享这些方法:
```javascript
function Person() {}
Person.prototype.name = "liubei";
Person.prototype.age = 29;
Person.prototype.job = "shayemuyou";
Person.prototype.sayName = function() {
alert(this.name);
}
var per = new Person();
```
3. 动态原型模式:在构造函数内部检查某个方法是否存在,如果不存在则添加到原型中:
```javascript
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
if (typeof this.sayName !== "function") {
Person.prototype.sayName = function() {
alert(this.name);
}
}
}
var per = new Person("liubei", 29, "shayemuyou");
```
4. 寄生构造函数模式:与普通构造函数相似,但返回的对象通常会经过额外的处理:
```javascript
function specialPerson(name, age, job) {
var o = new Person(name, age, job);
o.sayHello = function() {
alert("Hello, " + this.name);
}
return o;
}
var sp = specialPerson("liubei", 29, "shayemuyou");
```
5. 组合使用构造函数和原型模式:结合两种模式的优点,既能初始化对象,又能复用方法:
```javascript
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype.sayName = function() {
alert(this.name);
}
var per = new Person("liubei", 29, "shayemuyou");
```
每种模式都有其适用场景,理解并灵活运用这些模式,能够帮助开发者更有效地构建JavaScript应用程序。选择合适的对象创建模式可以提高代码的可读性、可维护性和性能。
2017-03-29 上传
2021-12-29 上传
点击了解资源详情
2021-01-18 上传
2020-11-20 上传
2020-11-29 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38500444
- 粉丝: 7
- 资源: 945
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析