JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】

一、工厂模式

工厂模式是一种用函数来实现创建对象的方法,这些函数可以被视为工厂,并且可以按需创建对象。它比使用构造函数的方式具有更高的抽象层次。以下是一个完整的工厂模式示例:

function Car(name, brand, price) {
    let car = {};
    car.name = name;
    car.brand = brand;
    car.price = price;
    car.display = function() {
        console.log(`The car is a ${this.brand} ${this.name} which costs ${this.price}.`);
    }
    return car;
}

let bmw = Car('328i', 'BMW', 500000);
let benz = Car('S-Class', 'Mercedes-Benz', 800000);
bmw.display();
benz.display();

这里定义了一个Car()函数,该函数以namebrandprice参数作为输入,并返回一个具有这些属性的对象。可以通过多次调用这个函数来创建多个不同的车辆对象。

二、构造函数模式

使用构造函数创建自定义类型是一种常用的模式,它使用new关键字和一个函数来创建对象。这种方式的好处是可以更方便地在对象内部定义属性和方法。以下是一个完整的构造函数模式示例:

function Car(name, brand, price) {
    this.name = name;
    this.brand = brand;
    this.price = price;
    this.display = function() {
        console.log(`The car is a ${this.brand} ${this.name} which costs ${this.price}.`);
    }
}

let bmw = new Car('328i', 'BMW', 500000);
let benz = new Car('S-Class', 'Mercedes-Benz', 800000);
bmw.display();
benz.display();

与工厂模式不同的是,这里使用this关键字来定义对象的属性和方法。使用new关键字调用构造函数,创建一个新的Car对象并返回。这种方式在定义属性和方法时更方便,但是每个对象都会定义自己的方法,这意味着每个对象都会占用更多的内存。

三、原型模式

原型模式是一种创建对象的方式,它使用一个常规的函数并在对象中进行定义。方法和属性被添加到函数的prototype属性中,从而可以被所有实例共享。以下是一个完整的原型模式示例:

function Car() {}
Car.prototype.name = '';
Car.prototype.brand = '';
Car.prototype.price = 0;
Car.prototype.display = function() {
    console.log(`The car is a ${this.brand} ${this.name} which costs ${this.price}.`);
}

let bmw = new Car();
bmw.name = '328i';
bmw.brand = 'BMW';
bmw.price = 500000;
bmw.display();

let benz = new Car();
benz.name = 'S-Class';
benz.brand = 'Mercedes-Benz';
benz.price = 800000;
benz.display();

上述示例定义了一个Car()函数,prototype属性中添加了三个属性和一个方法。可以使用new关键字调用Car()并创建多个实例,这些实例都可以访问相同的方法和属性。

四、动态原型模式

动态原型模式是一种创建对象的方式,它在必要时在对象中定义方法和属性。这种方式允许在不使用原型一样的结构的情况下,使用构造函数的方法来创建对象。以下是一个完整的动态原型模式示例:

function Car(name, brand, price) {
    this.name = name;
    this.brand = brand;
    this.price = price;
    if (typeof this.display !== 'function') {
        Car.prototype.display = function() {
            console.log(`The car is a ${this.brand} ${this.name} which costs ${this.price}.`);
        }
    }
}

let bmw = new Car('328i', 'BMW', 500000);
bmw.display();

let benz = new Car('S-Class', 'Mercedes-Benz', 800000);
benz.display();

动态原型模式的核心是在构造函数内部使用if语句来检查实例上是否有一个已定义的方法。如果没有,就使用prototype对象来定义此方法。这种方式使得方法可以被继承并且不会被重复定义,从而节省内存。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • 教你使用css制作出超级炫酷的血轮眼和轮回眼特效

    下面是“教你使用css制作出超级炫酷的血轮眼和轮回眼特效”的完整攻略: 教你使用css制作出超级炫酷的血轮眼和轮回眼特效 准备工作 在开始之前,需要准备以下工作: 在html中引入以下css样式: .eye { width: 30px; height: 30px; background: white; border: 3px solid black; bor…

    css 2023年6月10日
    00
  • Vue项目中关于全局css的处理

    在Vue项目中处理全局css,有以下几种常见的方法: 1. 使用全局样式表 可以通过在<head>标签中引入全局样式表来实现全局css处理。在Vue Cli的脚手架中,在src目录下创建一个assets文件夹,用于存放全局css文件。然后在public/index.html文件中添加全局样式表的引用: <head> <link …

    css 2023年6月10日
    00
  • bootstrap3.0教程之多种表格效果(条纹状表格、条纹状表格、鼠标悬停等)

    标题:Bootstrap3.0教程之多种表格效果 前言 在网站制作中,表格是常用的页面元素之一。Bootstrap3.0为我们提供了多种表格效果,可以让我们在设计网站时更加灵活多样化。本篇教程将详细讲解如何利用Bootstrap3.0实现多种表格效果。 条纹状表格 概述 条纹状表格在Bootstrap3.0中是非常常见的一种表格风格,其配色简洁明快,同时也能…

    css 2023年6月10日
    00
  • 条件CSS的高级用法

    条件CSS的高级用法 条件 CSS 是一种在 CSS 中使用条件语句的技术,可以根据不同的条件应用不同的样式。以下是一些常见的条件 CSS 用法。 方法一:使用 @supports 使用 @supports 是一种常见的条件 CSS 技术,可以根据浏览器是否支持某个 CSS 属性来应用不同的样式。以下是一个示例: /* 默认样式 */ .box { back…

    css 2023年5月18日
    00
  • 利用CSS、JavaScript及Ajax实现图片预加载的方法

    很高兴听到您询问如何利用CSS、JavaScript及Ajax实现图片预加载的方法。下面是详细的攻略: 1. 利用CSS实现图片预加载 利用CSS预加载图片是一种非常简单的方法,只需要在CSS文件中使用background-image属性将图片引入即可。以下是实现图片预加载的CSS样式代码和HTML代码示例: #preloaded-img { backgro…

    css 2023年6月9日
    00
  • css核心基础总结篇(推荐)

    CSS核心基础总结篇 CSS是前端开发中不可或缺的一部分,用于定义网页的样式和布局。以下是CSS的核心基础知识和学习总结: CSS基础 CSS选择器 CSS选择器用于选择需要应用样式的HTML元素,例如: p { color: red; } CSS属性 CSS属性用于定义HTML元素的样式,例如: p { color: red; } CSS样式表 CSS样式…

    css 2023年5月18日
    00
  • 学习CSS的背景图像属性background

    CSS中的背景图像属性 在CSS中,我们可以使用background属性来设置一个元素的背景。通过设置background属性的不同参数,我们可以对背景进行更精细的控制。其中一个非常重要的参数就是背景图像属性background-image。 背景图像属性background-image的使用方法 通过使用background-image,我们可以指定元素的…

    css 2023年6月9日
    00
  • CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大

    下面是CSS实现圆形放大镜狙击镜效果的攻略: 1. 使用CSS实现圆形放大镜狙击镜效果的基本步骤 1.1 HTML部分 首先,需要在HTML中创建图像容器以及用于显示放大结果的空间容器,例如: <div class="image-container"> <img src="example.jpg" a…

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