javascript工厂模式和构造函数模式创建对象方法解析

发布时间 - 2026-01-10 22:13:00    点击率:

工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现)。考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节,如下面的例子所示。

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 person1 = createPerson("Nicholas", 29, "Software Engineer");
var person2 = createPerson("Greg", 27, "Doctor");

函数createPerson()能够根据接受的参数来构建一个包含所有必要信息的Person 对象。可以无数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。随着JavaScript的发展,又一个新模式出现了。

二、构造函数模式

像Object 和Array 这样的原生构造函数,在运行时会自动出现在执行环境中。此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。例如,可以使用构造函数模式将前面的例子重写如下。

function Person(name, age, job){
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayName = function(){
 alert(this.name);
 };
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

在这个例子中,Person()函数取代了createPerson()函数。我们注意到,Person()中的代码除了与createPerson()中相同的部分外,还存在以下不同之处:

  • 没有显式地创建对象;
  • 直接将属性和方法赋给了this 对象;
  • 没有return 语句。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js面向对象  # js创建对象方式  # JavaScript对象创建模式实例汇总  # 深入理解JavaScript系列(48):对象创建模式(下篇)  # 深入理解JavaScript系列(47):对象创建模式(上篇)  # JS中创建自定义类型的常用模式总结【工厂模式  # 构造函数模式  # 原型模式  # 动态原型模式等】  # 浅谈js对象的创建和对6种继承模式的理解和遐想  # JavaScript中创建对象的模式汇总  # js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)  # 详解 javascript对象创建模式  # 自定义  # 在这个  # 本书  # 多个  # 出现在  # 给了  # 注意到  # 软件工程  # 但却  # 还将  # 考虑到  # 重写  # 可以使用  # 所示  # 开发人员  # 新模式  # 人知  # 不同之处  # 出现了  # 构建一个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  SQL查询语句优化的实用方法总结  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  jQuery 常见小例汇总  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  企业网站制作这些问题要关注  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何快速生成可下载的建站源码工具?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel中的withCount方法怎么高效统计关联模型数量  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  java中使用zxing批量生成二维码立牌  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  独立制作一个网站多少钱,建立网站需要花多少钱?  如何在橙子建站中快速调整背景颜色?  如何快速搭建高效香港服务器网站?  如何在万网自助建站中设置域名及备案?  Laravel如何生成URL和重定向?(路由助手函数)  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何用好域名打造高点击率的自主建站?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  JS弹性运动实现方法分析  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何续费美橙建站之星域名及服务?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  JS碰撞运动实现方法详解  想要更高端的建设网站,这些原则一定要坚持!  如何用wdcp快速搭建高效网站?  如何用腾讯建站主机快速创建免费网站?  香港服务器部署网站为何提示未备案?  中山网站制作网页,中山新生登记系统登记流程?  简历在线制作网站免费版,如何创建个人简历?  如何在IIS中新建站点并配置端口与IP地址?  如何在IIS服务器上快速部署高效网站?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  nodejs redis 发布订阅机制封装实现方法及实例代码  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  利用python获取某年中每个月的第一天和最后一天