js创建对象都有几种模式,具体都是什么?

简介: 1、通过Object构造函数或者对象字面创建单个对象这些方式有明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,出现了工厂模式。

1、通过Object构造函数或者对象字面创建单个对象

这些方式有明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,出现了工厂模式。

2、工厂模式

考试在es中无法创建类(es6前),开发人员发明了一种函数,用函数来封装以特定接口创建对象的细节。(实现起来是在一个函数内创建好对象,然后把对象返回)

img_330f74dfb9b57cbc8967aa6274d1087d.png

函数createPerson()能够根据接收的参数来构建一个包含所有必要信息的Person对象。工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题,即怎么知道一个对象类型。随着js发展,又出现了一个模式。

3、构造函数模式

像Object和Array这样的原生构造函数,在运行时会自动出现在执行环境,此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。

img_5cfa992f87c2a6270afad159bfb146e7.png

与工厂模式相比,具有以下特点:

1、没有显式创建对象;

2、直接将属性和方法赋值了this对象;

3、没有return语句;

4、要创建新实例,必须使用NEW操作符;(否则属性和方法将会被添加到window对象)

5、可以使用instanceof操作符检测对象类型;

构造函数的问题;

构造函数内部的方法会被重新创建,不同实例内的函数是不相等。可以通过将方法移到构造函数外部解决一些问题,但是面临新的问题:封装性不好。

这些问题可以通过原型模式解决。

4、我们创建的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有势力共享的属性和方法。(prototype就是通过调用构造函数而创建的那个对象实例的原型对象)

使用原型对象的好处是可以让所有对象实例共享它所包含的属性和放大,换句话说,不必在构造函数中定义对象实例的信息,而是将这些信息直接添加到原型对象中。

img_a11b711ebcf0a6939064e1ef1a961a3a.png

更常见的做法是用一个包含所有属性和方法的对象字面量来重写整个原型对象,并重设constructor属性。

img_e91c9da8535aab83fe4b1ad6075e83a2.png

原型对象的问题:

1、他省略了为构造函数传递初始化参数这一环节,结果所有实例默认情况下都将取相同的属性值,虽然这会在一定程度带来一定不便,但不是最大问题,最大的问题是由其共享的本性所决定的,对于包含基本值的属性可以通过在实例上添加一个同名属性隐藏原型上的属性。然后,对于包含引用数据类型的值来说,会导致问题。

这些问题导致很少单独使用原型模式。

5、组合使用构造函数模式和原型模式

这是创建自定义类型的最常见的方式。

构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性。所以每个实例都会有自己的一份实例属性的副本,同时共享着对方法的引用,最大限度的节省了内存,同时支持向构造函数传递参数。

img_af58c716dcdf95e1372ff015f4e32b42.png

6、动态原型模式

img_642f1c0f770df6e31c62a1e74b570d62.png

这里只有sayName() 不存在的情况下,才会将他添加在原型中,这段代码只会在初次调用构造函数的时候才执行,这里对原型所做的修改,能够立刻在所有实例中得到反应。

7、Object.create()

es5定义了一个名为Object.create()的方法,它创建一个新对象,其中第一个参数是这个对象的原型,第二个参数对对象的属性进行进一步的描述。

8、另有寄生构造函数模式和稳妥构造函数模式

相关文章
|
3月前
|
存储 安全 JavaScript
云计算浪潮中的网络安全之舵探索Node.js中的异步编程模式
【8月更文挑战第27天】在数字化时代的风帆下,云计算如同一片广阔的海洋,承载着企业与个人的数据梦想。然而,这片海洋并非总是风平浪静。随着网络攻击的波涛汹涌,如何确保航行的安全成为了每一个船员必须面对的挑战。本文将探索云计算环境下的网络安全策略,从云服务的本质出发,深入信息安全的核心,揭示如何在云海中找到安全的灯塔。
|
27天前
|
前端开发 JavaScript UED
探索JavaScript中的异步编程模式
【10月更文挑战第21天】在数字时代的浪潮中,JavaScript作为一门动态的、解释型的编程语言,以其卓越的灵活性和强大的功能在Web开发领域扮演着举足轻重的角色。本篇文章旨在深入探讨JavaScript中的异步编程模式,揭示其背后的原理和实践方法。通过分析回调函数、Promise对象以及async/await语法糖等关键技术点,我们将一同揭开JavaScript异步编程的神秘面纱,领略其带来的非阻塞I/O操作的魅力。让我们跟随代码的步伐,开启一场关于时间、性能与用户体验的奇妙之旅。
|
15天前
|
前端开发 JavaScript UED
探索JavaScript的异步编程模式
【10月更文挑战第33天】在JavaScript的世界里,异步编程是提升应用性能和用户体验的关键。本文将带你深入理解异步编程的核心概念,并展示如何在实际开发中运用这些知识来构建更流畅、响应更快的Web应用程序。从回调函数到Promises,再到async/await,我们将一步步解锁JavaScript异步编程的秘密,让你轻松应对各种复杂的异步场景。
|
1月前
|
JavaScript 前端开发 API
探索Node.js中的异步编程模式
【10月更文挑战第4天】在JavaScript的世界中,异步编程是提升应用性能和用户体验的关键。本文将深入探讨Node.js中异步编程的几种模式,包括回调函数、Promises、async/await,并分享如何有效利用这些模式来构建高性能的后端服务。
|
1月前
|
JavaScript 前端开发 调度
探索Node.js中的异步编程模式
在Node.js的世界里,异步编程是核心。本文将带你深入了解异步编程的精髓,通过代码示例和实际案例分析,我们将一起掌握事件循环、回调函数、Promises以及async/await等关键概念。准备好迎接挑战,让你的Node.js应用飞起来!
|
1月前
|
JavaScript 前端开发 开发者
探索Node.js中的异步编程模式
【9月更文挑战第33天】在JavaScript的后端领域,Node.js凭借其非阻塞I/O和事件驱动的特性,成为高性能应用的首选平台。本文将深入浅出地探讨Node.js中异步编程的核心概念、Promise对象、Async/Await语法以及它们如何优化后端开发的效率和性能。
25 7
|
2月前
|
JavaScript 前端开发
js创建对象| 25
js创建对象| 25
|
2月前
|
JavaScript 前端开发 开发者
探索Node.js中的异步编程模式
【9月更文挑战第15天】在Node.js的世界中,“一切皆异步”不仅是一句口号,更是其设计哲学的核心。本文将带你深入理解Node.js中异步编程的几种主要模式,包括经典的回调函数、强大的Promise对象、以及简洁的async/await结构。我们将通过实例代码来展示每种模式的使用方式和优缺点,帮助你更好地掌握Node.js异步编程的精髓。无论你是Node.js新手还是有一定经验的开发者,这篇文章都能给你带来新的启示和思考。让我们一起开启Node.js异步编程的探索之旅吧!
|
2月前
|
JavaScript 前端开发 中间件
深入浅出Node.js中间件模式
【9月更文挑战第13天】本文将带你领略Node.js中间件模式的魅力,从概念到实战,一步步揭示如何利用这一强大工具简化和增强你的Web应用。我们将通过实际代码示例,展示中间件如何在不修改原有代码的情况下,为请求处理流程添加功能层。无论你是前端还是后端开发者,这篇文章都将为你打开一扇通往更高效、更可维护代码的大门。
|
2月前
|
JavaScript 前端开发
JavaScript基础知识-使用工厂方法创建对象
本文介绍了JavaScript中使用工厂方法来创建对象的基础知识。
27 0
JavaScript基础知识-使用工厂方法创建对象