personalmente no le encuentro sentido el querer obtener el nombre de una propiedad cuando en principio de alguna manera tienes que indicarla por ti mismo. tampoco pude pensar en algun caso en que sea estrictamente necesario. adicional, en algunos casos pudiera devolver resultados inesperados. particularmente cuando dos o mas variables hacen referencia a la misma ubicacion de memoria. por ejemplo self y window siempre hacen referencia a la misma ventana. si no hay marcos, adicionalmente parent y top se refieren al mismo objeto.
Código:
Object.prototype.getInstanceName = function(instance){
for(var prop in this) if(this.hasOwnProperty(prop) && this[prop] === instance) return prop;
throw new Error("Instance not declared in this scope.");
}
self.getInstanceName(self); // puede devolver self, top, parent, o window;
document.getInstanceName(document.body); // devuelve body;