js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式).docx
### JavaScript面向对象之常见创建对象的方式####引言JavaScript的灵活性体现在其创建对象的多种方式上。本文将详细介绍三种常见的对象创建方法:工厂模式、构造函数模式以及原型模式,并探讨它们各自的优缺点。 ####工厂模式是一种常见的设计模式,用于抽象出创建对象的具体过程。在JavaScript中,可以通过编写一个函数来实现这种模式,该函数负责以特定接口创建对象的细节。以下是示例代码: ```javascript function createPerson(name, sex, age) { var obj = new Object(); obj.name = name; obj.sex = sex; obj.age = age; obj.show = function() { console.log(this.name, this.age, this.sex); }; return obj; } var p1 = createPerson('谦龙', '男', 100); p1.show(); //输出:谦龙100男var p2 = createPerson('雏田', '女', 14); p2.show(); //输出:雏田14女``` **优点**: - **易于理解**:工厂模式通过函数封装了对象创建的逻辑,使得代码更加整洁。 - **可扩展性**:可以通过修改工厂函数轻松添加新的属性或方法。 **缺点**: - **对象识别问题**:无法直接通过对象判断其创建方式。 - **代码重复**:每次创建对象时都需要重新定义相同的属性和方法。 ####构造函数模式通过使用`new`关键字来创建对象实例。这种方式与工厂模式类似,但更加规范化且具有更好的可读性。以下是构造函数模式的示例代码: ```javascript function CPerson(name, sex, age) { //首字母大写this.name = name; this.sex = sex; this.age = age; this.show = function() { console.log(this.name, this.age, this.sex); } var p1 = new CPerson('谦龙', '男', 100); p1.show(); //输出:谦龙100男var p2 = new CPerson('雏田', '女', 14); p2.show(); //输出:雏田14女``` **构造函数模式的特点**: - **首字母大写**:遵循惯例,表示这是一个构造函数。 - **this指向实例**:构造函数内部使用`this`来指向新创建的对象。 - **无需return**:构造函数自动返回一个新创建的对象。 **优点**: - **可读性强**:通过`new`关键字调用构造函数,明确指出这是在创建对象实例。 - **规范性**:首字母大写及`new`关键字的使用使得代码更符合约定。 **缺点**: - **方法重复创建**:每个实例都会拥有自己的一份方法副本,这导致内存浪费。 - **不支持继承**:构造函数模式本身不支持继承机制。 ####原型模式利用JavaScript中的原型链特性,允许对象实例共享属性和方法。这种方式通过给构造函数的`prototype`属性添加方法来实现。以下是原型模式的示例代码: ```javascript function CPerson() { } CPerson.prototype.name = '谦龙'; CPerson.prototype.sex = '男'; CPerson.prototype.age = 100; CPerson.prototype.show = function() { console.log(this.name, this.age, this.sex); }; var p1 = new CPerson(); p1.show(); //输出:谦龙100男var p2 = new CPerson(); p2.show(); //输出:谦龙100男``` **优点**: - **资源共享**:通过将方法定义在`prototype`上,可以被所有实例共享,减少了内存消耗。 - **支持继承**:可以轻松地扩展原型对象,支持更复杂的继承结构。 **缺点**: - **初始化属性**:原型上的属性是所有实例共享的,因此不适合存放需要初始化的属性。 - **属性访问**:通过`prototype`添加的属性不能通过`for...in`循环直接访问到,除非显式指定。 ###总结通过以上介绍,我们可以看到每种模式都有其适用场景和局限性。选择哪种模式取决于具体的应用需求: - **工厂模式**更适合简单的对象创建,尤其是当对象结构相对简单时。 - **构造函数模式**提供了一种更加规范化的对象创建方式,适用于需要多次创建相同类型的对象的场景。 - **原型模式**最适合需要共享方法和节省内存资源的情况,尤其是在创建大量相似对象时。
26.3KB
文件大小:
评论区