前端组件化 VS 单例模式 (字面量/函数闭包)

---->作用域隔离(单例模式--对象字面量)

通常项目开发的时候我们都会意识到通用的功能应该封装成组件,随时调用。但光有意识有的时候却无从下手,可能一开始会把一个功能单独写在一个文件里面,script标签引入,全局函数全局变量的写法。函数里面定义变量,dom操作,逻辑代码编写,直到实现功能。对于入门级码农来讲做到这一步,其实已经是有了本质上的进步,毕竟都是从这一步过来的。然而这么做导致的问题是:变量全是全局变量,没有隔离作用域。

所以组件化的第一步就是要隔离作用域,使用单个变量模拟命名空间。

这一转变从设计模式的角度来看,是运用了设计模式中的单例模式。在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例是否存在,如果存在直接返回,如果不存在,就先创建再返回,这样就确保一个类只有一个实例对象。在js中,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。在js里实现单例的方式有很多种,最简单的一种就是使用对象字面量的方法,其字面量里可以包含大量的属性和方法,同时该字面量也实现了作用域的隔离。

---->组件中引入私有的概念

接下来将为组件进一步升级,引入私有的概念。将组建的核心方法及变量,利用闭包将其私有化,即减少方法被修改的风险,又不容易出现变量重复的问题。核心思想为,将组建核心的方法利用闭包私有化,return一个提供给使用者操作的对象(内含方法对应的键值对/或者叫字面量)。

然而如果我们想只有在使用的时候才初始化,为了节约资源的目的,我们可以将私有的方法挂载在构造函数的原型上,然后将该构造函数return出来。每次使用的时候new 该函数,就可以调用对应方法。这种写法就非常干净,所有东西都包在一个自动执行的闭包里面,所以不会受到外面的影响,并且只对外公开了一个构造函数,这种写法显然已经可以满足绝大部分需求了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值