次のコードを検討してください。
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上記のコードはテストしていないため、エラーがある可能性があります。