function fn1(element){ /* code for element with class1 */ }
function fn2(element){ /* code for element with class2 */ }
function fn2(element){ /* code for element with class3 */ }
var fns={'class1': fn1, 'class2': fn2, 'class3': fn3};
for(var i in fns) {
if(hasClass(test, i)) {
fns[i](test);
}
}
для (var i in fns) выполняет итерацию через ключи в пределах карты fns. Без прерывания после того, как fnsi позволяет выполнять код всякий раз, когда есть совпадение, так что если у элемента есть, f.i., class1 и class2, будут выполняться как fn1, так и fn2. Преимущество этого подхода заключается в том, что код для выполнения для каждого класса является произвольным, как тот, который содержится в инструкции switch; в вашем примере все случаи выполняли аналогичную операцию, но завтра вам может понадобиться делать разные вещи для каждого. Вы можете моделировать случай по умолчанию, указав переменную статуса, указывающую, было ли совпадение найдено в цикле или нет. Вы не можете повторно использовать окно.
Если вы закрываете окно с помощью чего-то другого, кроме OK и кнопок «Отмена», вам необходимо обработать событие Window.Closing
(см. ссылку для примера).
ConfigDialogBox configDlg = null;
private void Config(object sender, RoutedEventArgs e)
{
configDlg = new ConfigDialogBox();
configDlg.Show();
configDlg.okButton.Click+=new RoutedEventHandler(SettingsChanged);
configDlg.cancelButton.Click+=new RoutedEventHandler(SettingsChanged);
}