Вот ситуация, когда проверка ошибок важна, и вы не должны были ее удалять. Скажем, мы идем с «трудным фабричным» решением @ Gabi:
function hardfactory(klass) {
var obj = new klass();
return obj;
}
try {
var x = hardfactory(asdf); // this will break unless
// we wrap every single hardfactory() call in a try-catch
} catch (err) {
console.log(err);
} // who wants to do this every time we invoke hardfactory? not I
Теперь давайте рассмотрим ваше оригинальное решение "soft factory":
function softfactory(klass) {
try {
eval("var obj = new " + klass + "()");
} catch (err) {
console.log(err);
}
return obj;
}
var y = softfactory("asdf"); // this will not break
// since we do the try catch inside the softfactory()
В этом случае вызов eval()
вполне оправдан. Важно понимать, что каждая языковая конструкция (да, даже eval()
) полезна и является частью языка по определенной причине. Тот факт, что некоторые люди злоупотребляют им или используют его в неправильных обстоятельствах, не означает, что это не очень мощный инструмент в правильных.