js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)

JS面向对象之常见创建对象的几种方式

在JavaScript中,创建对象一共有以下几种常见的方式:

  1. 工厂模式
  2. 构造函数模式
  3. 原型模式

下面我们将详细讲解每种创建对象的方式并且给出相应的示例。

工厂模式

工厂模式是用来创建多个相似对象的一种模式,它是通过一个工厂方法创建对象并返回。下面是一个简单的工厂模式的示例。

// 创建一个工厂对象
var bookFactory = {
  createBook: function(title, author, price) {
    var book = {};
    book.title = title;
    book.author = author;
    book.price = price;
    book.display = function() {
      console.log("Title: "+this.title+"\nAuthor: "+this.author+"\nPrice: "+this.price);
    };
    return book;
  }
}

// 创建两个book对象
var book1 = bookFactory.createBook("The Little Prince", "Antoine de Saint-Exupéry", 8.98);
var book2 = bookFactory.createBook("Harry Potter and the Philosopher's Stone", "J.K. Rowling", 14.99);

// 调用display方法展示book信息
book1.display();
book2.display();

在上述代码中,我们通过一个工厂方法createBook来创建了两个book对象,每个对象都有自己的title、author和price属性,同时还添加了一个display方法来展示对象的信息。

构造函数模式

构造函数模式是通过一个构造函数来创建一个对象,它的本质就是一个普通函数,只不过调用的方式和一般函数不同。下面是一个简单的构造函数模式的示例。

// 创建一个构造函数对象
function Book(title, author, price) {
  this.title = title;
  this.author = author;
  this.price = price;
  this.display = function() {
    console.log("Title: "+this.title+"\nAuthor: "+this.author+"\nPrice: "+this.price);
  };
}

// 创建两个book对象
var book1 = new Book("The Little Prince", "Antoine de Saint-Exupéry", 8.98);
var book2 = new Book("Harry Potter and the Philosopher's Stone", "J.K. Rowling", 14.99);

// 调用display方法展示book信息
book1.display();
book2.display();

在上述代码中,我们通过一个构造函数Book来创建了两个book对象,同样有title、author、price和display属性。

对于构造函数模式,我们需要注意的是如果有多个实例对象,那么这些实例对象都是独立的,它们各自保存着自己的属性和方法。

原型模式

原型模式是通过构造函数的原型来创建一个对象。在原型中定义的属性和方法将被所有实例对象所共享。下面是一个简单的原型模式的示例。

// 创建一个构造函数对象
function Book(){};
Book.prototype.title = 'none';
Book.prototype.author = 'none';
Book.prototype.price = 0;
Book.prototype.display = function() {
  console.log("Title: "+this.title+"\nAuthor: "+this.author+"\nPrice: "+this.price);
};

// 创建两个book对象
var book1 = new Book();
book1.title = "The Little Prince";
book1.author = "Antoine de Saint-Exupéry";
book1.price = 8.98;

var book2 = new Book();
book2.title = "Harry Potter and the Philosopher's Stone";
book2.author = "J.K. Rowling";
book2.price = 14.99;

// 调用display方法展示book信息
book1.display();
book2.display();

在上述代码中,我们通过构造函数Book的原型对象来创建了两个book对象。在原型中定义的属性和方法都是共享的,而title、author和price属性则是在实例化对象时被重新赋值的。

总结

既然提到了创建对象,那就不能不提对象池。对象池就是保存一定数量的相同对象供反复使用的一种方法。当需要创建一个新对象时,对象池中有现成的对象可以使用则返回一个现成的对象,如果对象池中没有现成的对象则创建新的对象。这种方式避免了频繁的对象创建和销毁,提高了效率。同时,需要重点注意的是对象复用时可能会存在对象的污染问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript使用DeviceOne开发实战(二) 生成调试安装包

    JavaScript使用DeviceOne开发实战(二) 生成调试安装包 背景介绍 DeviceOne是一个使用JavaScript编写原生App的开发平台,支持Android和iOS两个平台。生成调试安装包是开发者在DeviceOne平台上完成App开发后,进行测试、调试以及安装到真机进行更全面测试的关键步骤。 步骤说明 2.1 打开DeviceOne I…

    JavaScript 2023年6月11日
    00
  • Javascript Date getHours() 方法

    以下是关于JavaScript Date对象的getHours()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getHours方法 JavaScript Date对象的getHours()方法返回一个小时的数字(0-23)。该方法可用获取当前日期的小时数。 下使用Date对象的getHours()方法的示例: var date =…

    JavaScript 2023年5月11日
    00
  • php实现替换手机号中间数字为*号及隐藏IP最后几位的方法

    PHP实现替换手机号中间数字为*号及隐藏IP最后几位的方法相对简单,下面就具体介绍一下实现的方法及示例。 替换手机号中间数字为*号的方法 方法一:使用正则表达式替换 使用正则表达式是一个常用的方法,即利用preg_replace函数将手机号中间四位数字替换为*号。示例代码如下: $mobile = ‘13811112222’; $pattern = ‘/(\…

    JavaScript 2023年6月10日
    00
  • jsp中利用jquery+ajax在前后台之间传递json格式参数

    我来为您讲解“jsp中利用jquery+ajax在前后台之间传递json格式参数”的完整攻略。 什么是jQuery+Ajax传递JSON格式参数 jQuery是一个非常流行的JavaScript库,它简化了JavaScript的操作,能够实现跨浏览器的操作。Ajax是一种异步的JavaScript和XML(或JSON)的交互技术,可以实现局部刷新页面的效果。…

    JavaScript 2023年5月27日
    00
  • Go设计模式原型模式考查点及使用详解

    Go设计模式原型模式考查点及使用详解 什么是原型模式? 原型模式是一种创建型设计模式,其目的是通过克隆已有的对象来创建新的对象,而不是通过常规的new操作符通过调用构造函数来创建新的对象。原型模式的核心思想是通过使用原型实例来指定新对象的类型,然后通过复制这个原型来创建新的对象。 原型模式在Go语言中很常用,例如当我们需要创建一些相同属性和方法的对象,但是这…

    JavaScript 2023年5月28日
    00
  • javascript弹性运动效果简单实现方法

    下面是详细讲解“javascript弹性运动效果简单实现方法”的完整攻略: 1. 什么是弹性运动效果 弹性运动效果是指物体在移动过程中,会受到一个向相反方向的阻力,使得物体在移动过程中产生“弹性”的效果,类似于弹簧。 2. 实现原理 要实现弹性运动效果,我们需要用到以下三个关键参数: 目标位置 当前位置 速度 具体实现原理如下: 当前位置与目标位置之间的差值…

    JavaScript 2023年5月28日
    00
  • 实例解析package.json和最常见的scripts字段

    关于“实例解析package.json和最常见的scripts字段”的攻略,我会提供如下内容: 一、什么是package.json? package.json是Node.js项目中杂项文件中最重要的一份,其定义了项目的基本信息和开发所需的各种依赖以及构建、打包、测试等各个方面的命令和配置。通过这个文件,我们可以更好地管理项目依赖、规范版本、运行脚本等,也可以…

    JavaScript 2023年5月27日
    00
  • JS中可能会常用到的一些数据处理方法

    下面是关于JS中可能会常用到的一些数据处理方法的详细攻略。 1. 字符串处理方法 1.1 字符串的拼接 在JS中,我们可以使用加号 (+) 来实现字符串的拼接。例如:var str1 = “Hello,”; var str2 = “world!”; var result = str1 + ” ” + str2; 此时 result 的值为 Hello, wo…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部