Claro que hay una diferencia. Si define this.AlertA
, está definiendo un método que es local para la instancia de ObjA
. Si agrega AlertA
al prototipo del ObjA
constructor, se define para cada instancia de ObjA
. Este último es, en este caso, más eficiente, porque solo se asigna una vez, mientras que se asigna un método local cada vez que crea una instancia de ObjA
.
Así, utilizando this.AlertA
en:
var A = new ObjA,
B = new ObjA,
C = new ObjA;
para A, B y C, el constructor tiene que añadir el método AlertA
. AlertB
por otro lado, solo se agrega una vez. Puede verificar que utilizando:
function ObjA() {
alert('adding AlertA!');
this.AlertA = function() {
alert("A");
};
if (!ObjA.prototype.AlertB) {
alert('adding AlertB!');
ObjA.prototype.AlertB = function() {
alert("B");
};
}
}
var A = new ObjA, //=> alerts adding AlertA! and alerts adding AlertB!
B = new ObjA, //=> alerts adding AlertA!
C = new ObjA; //=> alerts adding AlertA!
Posible duplicado: http://stackoverflow.com/questions/422476/javascript-setting-methods-through-prototype-object-or-in-constructor-differenc –
Duplicado de hecho, gracias. –
posible duplicado de [Uso de 'prototipo' frente a 'esto' en JavaScript?] (Http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript) – user2864740