0

我正在使用 requireJS 模块研究 JavaScript 架构。模块定义非常简单:

define([
    "dependency1.js",
    "dependency2.js"
], function (dep1, dep2) {

    dep1.dropdown = new Module("dropdown", function (sandbox) {
      // Private functions
      function getWhatever() {
        // do something
      }

      function getAnother() {
        // do another thing
      }

      // Public methods
      return {
         doSomething: function () {
            // do one more thing
            getAnother();
         }
      };
    });
});

比我有一个名为“模块”的类,在其中我试图将try catch块应用于模块方法,如下所示:

var Module = function (id, creator) {
  var instance,
      sandbox = buildSandbox(),
      name,
      method;

  instance = creator(sandbox);

  for (name in instance) {
    // Looping though all methods inside module instance
    method = instance[name];

    if (typeof method === "function") {
        // Making every function execute within try catch block
        instance[name] = (function (name, method) {
           return function () {
             try { return method.apply(this, arguments); }
             catch (ex) { console.log("ERROR", name + "(): " + ex.message); }
           };
        })(name, method);
    }
  }
}

问题是,由于模块实例只包含公共方法,我不能将try catch块应用于私有方法。

我在想,如果我公开所有实例方法,它就不再安全了。

有没有一种方法可以将try catch块也应用于私有方法,而无需重新设计每个模块本身?

4

1 回答 1

0

除非您想在模块内添加代码以自动添加 try-catch,否则不,没有办法做到这一点。

你基本上有两个选择:

  1. 将你想在 try-catch 中包含的所有方法设为 public,然后使用你拥有的代码。
  2. 别担心。如果您的公共方法最终调用了您的私有方法,那么无论如何您都会得到不错的错误覆盖。

我不会让“安全”影响您的决定。您正在编写 JavaScript,人们总是可以查看源代码并查看发生了什么,它永远不会真正安全。

于 2012-07-04T17:09:01.767 回答