Cita: ¿por que se comporta diferente cuando se usan objetos de notación literal, en vez de variables?.
Es una característica del lenguaje. Una vez que se sabe esto, la solución es sencilla.
De la misma forma en que esto:
Código PHP:
<script type="text/javascript">
var a={b:2}
var c=a;
c.b=9;
alert(a.b);//9
</script>
Puede solucionarse así:
Código PHP:
<script type="text/javascript">
var a={b:2}
var c=a;
c={b:9};
alert(a.b);//2
</script>
Esto (y lo mismo tu ejemplo):
Código PHP:
<script type="text/javascript">
function uno(){
this.b={a:2};
}
uno.prototype.setB=function(x){this.b.a=x}
function dos(){}
dos.prototype=new uno;
var z=new dos;
var x=new dos;
z.setB(5)
alert(z.b.a);
alert(x.b.a);
</script>
Puede solucionarse así:
Código PHP:
<script type="text/javascript">
function uno(){
this.b={a:2};
}
uno.prototype.setB=function(x){this.b={a:x};}
function dos(){}
dos.prototype=new uno;
var z=new dos;
var x=new dos;
z.setB(5)
alert(z.b.a);
alert(x.b.a);
</script>