OOP,名称空间的顶级方法内的私有函数

bob*_*e01 4 javascript oop private-members javascript-namespaces

我有一个声明命名空间的js脚本,然后有一个run()我可以在XUL脚本中调用的方法,如myNamespace.run():

var myNamespace = {
    run: function() {
        var selectedText = getSelText();
        alert (selectedText);

        var getSelText = function() {
            var focusedWindow = document.commandDispatcher.focusedWindow;
            var selText = focusedWindow.getSelection();

            return selText.toString();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够getSelText()myNamespace.run()不需要声明getSelText()为另一个顶级函数的情况下调用内部myNamespace.相反,它应该像内部的私有方法myNamespace.run().

当我运行此脚本时,我收到一个错误:

getSelText 不是一个功能.

我是JavaScript的新手,所以我不知道设计它的最佳方法.是否有可能实现我的目标?我是以错误的方式来做这件事的吗?

感谢任何帮助!

Jas*_*wig 7

它被称为模块模式.创建一个匿名函数(用于作用域),立即调用并返回公共接口.

var myNamespace = (function() {
  // private functions for your namespace
  var getSelText = function() {
        ...
  };

  return {
    run: function() {
        var selectedText = getSelText();
        alert (selectedText);
    }
  };
})()
Run Code Online (Sandbox Code Playgroud)