JavaScript面向对象深入解析:工厂模式与构造函数

需积分: 9 3 下载量 104 浏览量 更新于2024-09-19 收藏 30KB DOCX 举报
"javascript面向对象学习笔记,探讨了工厂模式与构造函数模式,以及它们的优缺点和改进方式" 在JavaScript中,面向对象编程是一种重要的编程范式,它允许我们通过类和对象来组织代码,模拟现实世界中的实体。这篇学习笔记主要涵盖了两个核心概念:工厂模式和构造函数模式。 **工厂模式** 工厂模式是一种创建对象的模式,它的核心思想是通过一个函数(在这里是`CreatePerson`)来创建具有相同属性和方法的对象。在这个例子中,`CreatePerson`函数接收参数`name`、`age`和`job`,然后创建一个新的对象,并赋予这些属性。此外,它还为对象添加了一个`sayName`方法,用于显示对象的`name`。虽然工厂模式能方便地创建多个相似对象,但它的缺点是无法明确识别对象的类型。所有通过`CreatePerson`创建的对象都只是`Object`类型,没有自己的特定类型。 **构造函数模式** 为了克服工厂模式的不足,JavaScript引入了构造函数。`Person`函数就是一个构造函数,通过`new`关键字来创建新实例。使用构造函数,每个对象都有自己的`this`引用,因此`this.name`、`this.age`和`this.job`都是独立的。此外,构造函数内部的方法`sayName`也被赋值给了`this.sayName`,使得每个实例都能访问。这样,`person1`和`person2`既是`Person`的实例,也是`Object`的实例,解决了类型识别问题。然而,这种模式的缺点是每个实例都有其独立的`sayName`函数副本,造成了内存浪费。 **优化构造函数模式** 为了消除每个实例都保存一份方法副本的问题,我们可以将方法定义移出构造函数,将其作为全局函数。这样,所有实例共享同一个`sayName`函数,避免了重复创建。但是,这样做会使得`sayName`函数仅限于对象内部调用,失去全局作用域,同时也意味着如果对象需要多个方法,将需要定义多个类似的全局函数,这并不理想。 总结来说,JavaScript中的面向对象编程涉及到如何创建和管理对象。工厂模式适合快速创建相似对象,但类型识别不足;构造函数模式解决了类型问题,但可能导致内存浪费;而优化后的构造函数模式则试图平衡这两者。在实际开发中,根据项目需求和性能考虑,可能需要结合使用这些模式或寻找其他优化策略,如原型链继承、ES6的类等。