Вот это правильное объяснение. Даже в объекте String нельзя. Но можно делать хитро:
var str = new String('data'),
data;
str.toString = function(){
return data || ''.toString.call(this);
};
alert(str);
data = 'newData';
alert(str);
Т.е. можно использовать один объект, но значения он может возвращать разные.