我正在使用 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块也应用于私有方法,而无需重新设计每个模块本身?