Empezar diciendo que el keyword
this se puede evitar cuando se llama de forma lineal (desde atributos en html) porque siempre se toma de referencia a sí mismo, luego onchange="
window[this.value]
" es lo mismo que onchange="
window[value]
".
Ahí se utiliza
window porque que todas las variables y funciones declaradas en el scope global son propiedades de éste objeto. Lo que hace el array literal es acceder a sus propiedades (en realidad un array son todo propiedades, incluso los numéricos que solo pueden ser accedidos de esta forma). La diferencia entre el punto y el array literal es que los nombres de las propiedades se pasan de forma distinta, por ejemplo:
Código:
// Forma normal
window.alert();
o
alert();
// Mediante array "asociativo"
window["alert"]();
En este caso como lo que obtenermos de la propiedad
value del select es texto o string, necesitamos utilizar la segunda forma. Digamos que son dos alternativas. Te pongo otro ejemplo:
Código:
var arr = [];
arr["propiedad"] = "algo";
console.log(arr.propiedad); // "algo"
console.log(arr["propiedad"]); // "algo"
// Atento a este, también pueden pasarse variables con texto, números etc. mientras que en el normal no.
var variable = "propiedad";
console.log(arr[variable]); // "algo"
Espero haberme explicado más o menos.
Saludos