我有一个按照模块模式构建的 Javascript 对象。我有几个私有(private)函数,它们是从其他同级“私有(private)”函数调用的。如何访问另一个变量/函数而不可能意外访问全局/外部变量/对象/函数?
function doSomething() {
alert("Something I don't want to do");
}
var My.Namespaced.SingletonClass = (function() {
var init = function() {
doSomething();
}
var doSomething = function() {
alert("Something I want to do");
}
return {
"init": init;
}
})();
My.Namespaced.SingletonClass.init();
我的猜测是上面的代码实际上会访问正确的内部 doSomething
函数,但我想要比这更高的安全性。我如何才能显式地寻址内部/嵌套函数而不用担心意外调用函数或寻址我的单例周围范围内的对象?
最佳答案
简短版:你不能。如果 doSomething
没有被定义为 init
的兄弟,那么 JavaScript 将连续搜索更广泛的范围,直到它找到一个 doSomething
函数,或者它运行超出搜索范围。
更长的版本:您可以通过使用私有(private)对象来保存您的私有(private)辅助函数来防止此类行为,如下所示:
function doSomething() {
alert("Something I don't want to do");
}
// Assuming My.Namespaced is already defined:
My.Namespaced.SingletonClass = (function() {
var helpers = {};
helpers.doSomething = function() {
alert("Something I want to do");
}
var init = function() {
helpers.doSomething();
}
return {
init: init
}
})();
My.Namespaced.SingletonClass.init();
我不确定辅助函数是真正的 sibling 是否重要(但我不明白为什么这会特别重要)。
另外请记住,在添加 SingletonClass
之前需要定义 My
和 My.Namespaced
- 并且没有必要使用您要返回的对象中的键的 JSON 样式引用。
关于javascript - 如何在不访问包含范围内的内容的情况下安全地访问 Javascript 模块模式中的其他兄弟函数和变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3339668/