JavaScript闭包的高级应用:扩展、克隆与私有化封装
作者:木棉时间:2026-10-27 11:57:50浏览:479
本文深入探讨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() 进行开锁,从而实现了内部变量的私有化。虽然这种实现方式未必是最优解,但我们可以从中学习这种加锁与解锁的功能机制。
作者最新文章
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
