4

我有一个按照模块模式构建的 Javascript 对象。我有几个私有函数,它们是从其他兄弟“私有”函数调用的。如何访问另一个变量/函数而不会意外访问全局/外部变量/对象/函数?

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函数,但我想要更多的安全性。我怎样才能显式地处理内部/嵌套函数,而不必担心意外调用函数或在我的单例范围内寻址对象?

4

1 回答 1

5

简短版:你不能。如果doSomething未定义为 的同级init,则 JavaScript 将连续搜索更广泛的范围,直到找到一个doSomething函数,或者它用完可搜索的范围。

更长的版本:您可以通过使用私有对象来保存您的私有辅助函数来防止这种行为,如下所示:

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();

我不确定帮助函数是真正的兄弟姐妹是否重要(但我不明白为什么这特别重要)。

还要记住,MyMy.Namespaced您继续之前需要对其进行定义SingletonClass- 并且不需要对您返回的对象中的键使用 JSON 样式的引用。

于 2010-07-27T15:18:12.943 回答