setTimeout(mike.showName(), 5000); executes mike.showName() immediately and passes the return value to setTimeout()
setTimeout(function(){ mike.showName(); }, 5000); passes a pointer to the function instead. That way setTimeout can execute the function, rather than it's return value.