Nada solo queria saber por que lo descubri hace poco y me di cuenta que tengo que corregir muchas clases que hize xD.
como todos sabran una clase en js es una función con prototipo, al instanciar la clase se crea un nuevo objeto copiando el prototipo, pero si este es un objeto, pasa a la instancia como referencia y no como copia, por ejemplo si ejecutan el siguiente codigo:
var a = function () {}
a.prototype.objeto = {a:'a'};
a.prototype.prop = 'a';
var ia = new a();
var ib = new a();
ia.prop = 'b';
ia.objeto.a = 'b';
console.log(ia.prop);
console.log(ia.objeto);
console.log(ib.prop);
console.log(ib.objeto);
El resultado es:
b
{ a: 'b' }
a
{ a: 'b' }
Osea, la propiedad "prop" cambiana en la instancia a, solo cambia en dicha instancia, mientras que al hacer ia.objeto.a = 'b'; se modifica para todas las instancias, ya que tanto ia.objeto como ib.objeto son referencias a a.prototype.objeto.
Esto tambien pasa si hago la clase de este modo:
var a = function () {}
a.prototype = {
objeto: {a:'a'},
prop: 'a';
};
La unica forma de tener un objeto como propiedad sería creandolo en el constuctor:
var a = function () {
this.prop = 'a';
this.objeto = {a:'a'};
}
Ahora, me acabo de dar cuenta que muchas clases las tengo mal hechas, normalmente por uso:
classe.protoype = {
options: {}
};
:S
En fin, alguien sabe por que esto es asi?
--
El Tio ~ Programador, hacker y filósofo
web:
http://blog.exodica.com.arLinked'in:
http://www.linkedin.com/in/ogentilezza
Twitter:
@exos, Indeti.ca:
@exosTels: [+54 11] 638-LINUX (54689) -
[+54 9 11] 6799-4797