Про var self = obj; признаться недодумался, спасибо! Просто JS специфический язык, не похожий на классическое представление ООП.
А вот ваш второй пример ничего не выводит, в отличие от первого примера.
И кстати, тогда уж и просто
alert(obj.name);
прокатит.
Это повезло что мы объявили этот объект.
А если создавать их несколько с помощью конструктора еще не факт, что прокатит.