JavaScript 创建对象的七种模式详解

作者:小括号

时间:2026-10-30

浏览:441

本文系统介绍JavaScript中创建对象的多种模式,包括工厂模式、构造函数模式、原型模式及其组合使用。详细解析各模式的实现原理、优缺点及适用场景,涵盖态原型、寄生构造函数与稳妥构造函数模式,帮助开发者根据实际需求选择最优方案,提升代码封装性与复用性。

文章目录

JavaScript对象创建模式概述

在JavaScript中,存在多种创建对象的方式,通过这些模式可以操作对象所包含的属性与方法。

通常约定构造函数名称的首字母大写,而非构造函数(普通函数)名称首字母小写。构造函数与普通函数的本质区别仅在于调用方式:任何函数若通过new关键字调用,即可视为构造函数;若不通过new调用,则其行为与普通函数无异。

以下是对几种常见对象创建模式的深入解析:

工厂模式与构造函数模式

工厂模式:定义一个普通函数,在函数内部创建一个Object实例,为其添加属性与方法并赋值,最后返回该对象。此模式的主要局限在于无法识别对象的具体类型。

构造函数模式:通过构造函数使用this关键字进行属性赋值。每次创建实例时,都会重新创建方法,导致相同的方法被多次实例化,造成资源浪费。若将方法移至全局环境以解决此问题,则会破坏封装性。这一问题可通过原型模式加以优化。

原型模式及其关系图解

原型模式:每个函数都拥有一个prototype属性,该属性是一个指针,指向一个对象。该对象包含由构造函数创建的所有实例所共享的属性和方法。

原型对象、构造函数与实例之间的关系如下图所示:

    JavaScript对象创建模式概述

图解说明1:构造函数及其创建的实例,它们的prototype属性均指向构造函数的原型对象。

图解说明2:构造函数的原型对象包含constructor属性,该属性指向构造函数本身。

图解说明3:构造函数的原型对象所包含的所有属性与方法,均可由该构造函数创建的所有实例共享。

若使用对象字面量重写原型对象,constructor属性将指向Object构造函数。若需使其指向特定的构造函数(如Person),则需手动修改原型对象的constructor属性值,例如设置为constructor: Person。如此,即使原型对象被重写,其constructor仍指向Person构造函数。

若先创建实例,随后直接添加属性或方法,实例可以直接访问这些新添加的内容。

若先创建实例,随后重写原型对象,则构造函数的prototype将指向新的原型对象,而之前创建的实例的prototype仍指向最初的原型对象。因此,已有实例无法访问新原型对象中的新属性或新方法。

组合模式与动态原型模式

原型对象包含的是共享的属性和方法,这意味着每个实例都拥有这些信息,导致实例间缺乏差异,且无法传递参数,这往往不符合实际需求。每个实例既需要共同信息,又需要独立信息,因此通常组合使用构造函数模式与原型模式。

以下是构造函数模式与原型模式组合使用的具体示例:

                          JavaScript对象创建模式概述

动态原型模式:将独立的构造函数与其原型对象结合,在构造函数内部初始化原型,并为其添加方法。

                            JavaScript对象创建模式概述

若该方法尚不存在,则将其添加到原型对象上。该方法仅在初始化原型时执行,且仅执行一次。

寄生与稳妥构造函数模式

寄生构造函数模式:与工厂模式类似,区别在于寄生构造函数模式是一个构造函数,通过new关键字创建实例。

稳妥构造函数模式:不包含公共属性,其方法不引用this。创建实例时不使用new关键字,只能通过特定方法访问属性(即传入的数据)。

以上关于JavaScript创建对象多种模式的介绍即为全部内容,旨在为开发者提供参考,欢迎支持。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章