考虑以下代码:
function foo(handlers) {
callSomeFunction(handlers.onSuccess, handlers.onFailure);
}
调用者可能会这样做:
foo({onSuccess: doSomething, onFailure: doSomethingElse });
或者只是
foo()
如果她/他没有什么特别的事情要做。
上面代码的问题是,如果“处理程序”未定义,就像上面简单的 foo() 调用一样,那么在执行 callSomeFunction(handlers.onSuccess, handlers.onFailure) 期间将引发运行时异常。
为了处理这种情况,可以将 foo 函数重写为:
function foo(handlers) {
var _handlers = handlers || {};
callSomeFunction(_handlers.onSuccess, _handlers.onFailure);
}
或更结构化
function safe(o) {
return o === Object(o) ? o : {};
}
function foo(handlers) {
callSomeFunction(safe(handlers).onSuccess, safe(handlers).onFailure);
}
我试图在 sugarjs 和 underscore 等库中找到类似 safe() 函数的东西,但什么也没找到。我错过了什么?是否有任何其他具有类似功能的实用程序库?
只是尽量不重新发明轮子......;)
BR,阿德里安。
PS我没有测试上面的代码,所以它可能有错误。