欢迎光临散文网 会员登陆 & 注册

在 JavaScript 中实现单例

2023-08-10 00:08 作者:十三他很帅  | 我要投稿

单例模式是一种面向对象的软件设计模式,它确保给定类只实例化一次。在许多不同情况下它都很有用,例如创建应用程序中共享的全局对象。尽管JavaScript支持面向对象的编程,但为了实现这个模式,它并没有提供太多简单的选项。

最灵活且稍微高级的方法是使用代理对象(Proxy object)。代理对象用于定义所谓的陷阱(traps)。陷阱是允许为某些操作(如属性查找、赋值等)定义自定义行为的方法。单例模式规定给定类只能有一个实例。因此,最有用的陷阱是handler.construct()new运算符的陷阱。

事实证明,handler本身只是一个对象。除了handler.constructor()之外,我们可以使用处理程序来存储我们要实例化的类的唯一实例以及是否已经实例化。这样,我们可以为任何需要转换成单例的类创建一个可重用的处理程序对象,同时还能为其他可能需要自定义的操作提供附加的陷阱。

以下是一个将class变换为单例的基本函数示例,基于上述解释:

这里有一个简单的实际示例,以便更好地理解它的作用:

在上面的例子中,你可以看到MySingletonClass实例化第二次时,没有任何变化。这是因为已经存在一个实例,所以它会返回该实例,而不是创建一个新对象。如前所述,这是一个singletonify函数的基本实现。它可以被扩展以进一步修改行为,或者使用传递给构造函数的某些数据,在稍后调用中更新其持有的instance

在 JavaScript 中实现单例的评论 (共 条)

分享到微博请遵守国家法律