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日

相关文章

  • js中过滤特殊字符的正则表达式

    接下来我将详细讲解“js中过滤特殊字符的正则表达式”的攻略。 正则表达式 正则表达式是一种模式匹配的工具,它可以用来匹配并提取文本中的特定字符或字符串。在JavaScript中,可以使用正则表达式来过滤特殊字符。 过滤特殊字符 过滤特殊字符可以提高网站或应用程序的安全性和稳定性,防止恶意代码注入或造成页面渲染异常等问题。 在JavaScript中,可以使用正…

    JavaScript 2023年6月10日
    00
  • js DOM 元素ID就是全局变量

    JavaScript DOM 元素ID就是全局变量这一特性,指的是在使用getElementById获取DOM元素的时候,该元素的ID将自动成为一个全局变量,可以直接访问和操作该元素。 例如,如果我们有一个按钮元素,其ID为“myButton”,我们可以使用以下代码获取该按钮元素: var btn = document.getElementById(&quo…

    JavaScript 2023年6月10日
    00
  • JS中的算法与数据结构之集合(Set)实例详解

    JS中的算法与数据结构之集合(Set)实例详解 1. 什么是Set? Set 是ES6新增的数据结构,它是一种无序且唯一的数据集合,类似于数组,但是它不允许有相同的元素存在,可以用来存储任何类型的值(对象,字符串,数字等)。 Set可以显著地提高数据读取效率和数据去重的效果。 2. Set的使用方法 2.1 创建Set并添加元素 // 创建set const…

    JavaScript 2023年5月28日
    00
  • JS实现获取时间已经时间与时间戳转换

    要实现获取当前时间及时间戳,以及将时间戳转换为时间,可以在 JavaScript 中使用 Date 对象和相应的方法实现。下面是实现该功能的完整攻略: 1. 获取当前时间和时间戳 使用 Date 对象获取当前时间 let currentDate = new Date(); console.log(currentDate); 在控制台输出当前日期和时间对象的信…

    JavaScript 2023年5月27日
    00
  • iOs迁至WKWebView跨过的一些坑

    下面是详细讲解“iOs迁至WKWebView跨过的一些坑”的完整攻略: WKWebView简介 在iOS中,WKWebView是一个基于WebKit引擎的控件,可以用于加载网页。相较于UIWebView,WKWebView有性能更好、相应更快、占用内存更少等优点,因此被广泛应用于iOS应用的WebView开发中。 迁移步骤 步骤1:工程迁移 将UIWebVi…

    JavaScript 2023年6月11日
    00
  • JavaScript时间复杂度和空间复杂度

    当我们在使用JavaScript编写应用程序时,我们需要考虑算法的时间复杂度和空间复杂度。算法的时间复杂度和空间复杂度描述了执行算法所需的时间和空间量。下面我们将详细解释JavaScript中的时间复杂度和空间复杂度,并使用两个示例说明这些概念。 时间复杂度 算法的时间复杂度描述了算法执行所需的时间量。它通常用“大O”表示法表示,如O(n)、O(n²)等。 …

    JavaScript 2023年5月27日
    00
  • 关于js和php对url编码的处理方法

    当涉及到 URL 编码和解码时,JavaScript 和 PHP 都提供了自己的方法。 JavaScript URL 编码和解码 JavaScript 中处理 URL 编码和解码的方法是 encodeURIComponent() 和 decodeURIComponent() 方法。其中,encodeURIComponent() 用于将 URL 中的非字母数字…

    JavaScript 2023年5月19日
    00
  • 详解js的视频和音频采集

    下面是详解JS的视频和音频采集的完整攻略: 1. 准备工作 在进行视频和音频采集前,需要先准备一些工作: 获取摄像头和麦克风的权限。可以使用 getUserMedia 方法来获取权限。该方法支持的浏览器版本:Can I use getUserMedia。 创建视频和音频对象。可以使用 HTMLMediaElement 和 MediaRecorder 来创建视…

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