您可以将 init 逻辑封装在单独的init函数中,然后让另一个函数调用它们并捕获结果。例如:
<body>
<div id=nav></div>
<div id=search></div>
<script>
function initNavigation() {
if (document.getElementById('nav')) {
new navigation();
}
}
function initSearch() {
if (document.getElementById('search')) {
new search();
}
}
function initCarousel() {
new carousel();
}
function initNoError() {
return "ok";
}
/**
* Expects a list of functions to execute, and will capture either the retVal or the error.
*/
function init() {
var results = [],
result;
for (var i = 0; i < arguments.length; i++) {
result = {};
try {
result.retVal = arguments[i]();
} catch (e) {
result.error = e;
}
results.push(result);
}
return results;
}
var initResults = init(initNavigation, initSearch, initCarousel, initNoError);
console.log(initResults);
</script>
</body>
此代码将为我显示以下内容。ReferenceError
错误是因为我没有你的构造函数。这TypeError
似乎是因为 Firefox 正在返回<div>
相同 id 的,而这个 div 当然不是构造函数。
[
Object { error=ReferenceError: navigation is not defined},
Object { error=TypeError: search is not a constructor},
Object { error=ReferenceError: carousel is not defined},
Object { retVal="ok"}
]