Na pewno jest różnica. Jeśli zdefiniujesz this.AlertA
, definiujesz metodę, która jest lokalna dla instancji ObjA
. Jeśli dodasz AlertA
do prototypu konstruktora ObjA
konstruktora, jest on zdefiniowany dla każdego wystąpienia ObjA
. Ta druga metoda jest w tym przypadku bardziej wydajna, ponieważ jest przypisana tylko raz, a lokalna metoda jest przypisywana za każdym razem, gdy tworzysz instancję ObjA
.
Więc za pomocą this.AlertA
w:
var A = new ObjA,
B = new ObjA,
C = new ObjA;
dla A, B i C, konstruktor musi dodać metodę AlertA
. Z drugiej strony, AlertB
jest dodawany tylko raz. Można to sprawdzić, używając:
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!
Possbible duplikat: http://stackoverflow.com/questions/422476/javascript-setting-metody-przez -prototyp-object-or-constructor-differenc –
Powiel się, dziękuję. –
możliwy duplikat [użycia "prototypu" kontra "tego" w JavaScript?] (Http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript) – user2864740