JavaScript闭包的高级应用:扩展、克隆与私有化封装

作者:木棉

时间:2026-10-27

浏览:478

本文深入探讨JavaScript闭包的高级应用场景,包括通过自执行函数扩展现有模块方法、在重载中保留旧方法引用、利用闭包实现对象的浅层克隆,以及通过加锁与解锁机制管理跨文件的私有变量共享。

文章目录

模块方法的动态扩展

扩展


代码示例:


具体实现代码如下:

var blogModule = (function (my) {
my.AddPhoto = function () {
// 添加内部业务逻辑代码
 };
return my;
}(blogModule));

原理说明:


将模块自身作为参数传入方法中,从而实现了方法的动态扩展,这种模式类似于零件的组装过程。


方法重载与旧方法保留

代码示例:


具体实现代码如下:

var blogModule = (function (my) {var oldAddPhotoMethod = my.AddPhoto;
my.AddPhoto = function () { // 重载方法,依然可通过oldAddPhotoMethod调用旧的方 }; return my;}(blogModule));

原理说明:


这种模式的优势在于可以在重写方法的同时,保留并调用原有的旧方法。


对象的浅层克隆与继承

克隆与继承


代码示例:


具体实现代码如下:

var blogModule = (function (old) { var my = {}, key; for (key in old) { if (old.hasOwnProperty(key)) { my[key] = old[key]; } } var oldAddPhotoMethod = old.AddPhoto; my.AddPhoto = function () { // 克隆以后,进行了重写,当然也可以继续调用oldAddPhotoMethod }; return my; } (blogModule));

原理说明:


这是一种简单的对象克隆实现方式。


跨文件私有变量的加锁与解锁

跨文件共享私有对象


代码示例:


具体实现代码如下:

var blogModule = (function (my) { var _private = my._private = my._private || {}, _seal = my._seal = my._seal || function () { delete my._private; delete my._seal; delete my._unseal; }, _unseal = my._unseal = my._unseal || function () { my._private = _private; my._seal = _seal; my._unseal = my._unseal; }; return my; } (blogModule || {}));

原理说明:


通过调用 blogModule._seal() 进行上锁,以及 _unseal() 进行开锁,从而实现了内部变量的私有化。虽然这种实现方式未必是最优解,但我们可以从中学习这种加锁与解锁的功能机制。

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章