Hola:
Con prototype se pueden añadir nuevos atributos y métodos a los objetos, ya sean creados por el usuario como los existentes...
Con una declaración:
var dato = new autoComplete(cur);
Con ese añadido se puede hacer algo así:
dato.moveUp();
La otra sintaxis se usa para decrecer en una unidad el atributo cur del objeto actual (this)... Si se pone antes del objeto decrece antes de ser usado y si se pone después primero se usa y luego se hace decrecer... en el caso que comentas, al ser una instrucción aislado da igual donde se ponga, pero por ejemplo:
midato = miarray[++indice] y miarray[indice++] son distintas. en el primero de los casos primero incrementa el valor de la variable indice y luego se hace la asignación, y en el segundo se hace primero la incrementación y luego se asigna...
var miarray = new Array(10, 20, 30);
var indice = 1;
// miarray[++indice] == 30
// miarray[indice++] == 20
Si no entiendes algo, avisa.
Saludos