【发布时间】:2017-01-17 22:58:19
【问题描述】:
我正在阅读关于 Javascript 模块模式的 this 文章并遇到了一个 sn-p,它声称您可以跨模块文件保留私有变量/函数并相互访问它们:
var MODULE = (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 = _unseal;
};
// permanent access to _private, _seal, and _unseal
return my;
}(MODULE || {}));
我对如何实现这一点有点困惑,但我认为大部分困惑是由于不太了解它是如何工作的;它如何使其他已加载的脚本能够利用这些内部值?以及如何在这个“私有”空间中添加函数和变量?
我的最终目标是提供一种“抽象”函数变量,它必须在子模块中被覆盖,但仍需要在基本模块的文件中引用。诚然,我没有玩过这么多,但这主要是因为我试图了解实际实现的工作原理。
我正在考虑类似以下的内容,但它似乎不起作用,因为它无法访问内部函数:
// Preserve state of private variables/functions across modules
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 = _unseal;
};
my._private._unseal();
my._private.bindEvents = function () {
alert("This function should be re-declared in your sub-module.");
};
my._private._seal();
提前致谢。
【问题讨论】:
标签: javascript design-patterns module