Ответ 1
Конечно, есть разница. Если вы определяете this.AlertA
, вы определяете метод, который является локальным для экземпляра ObjA
. Если вы добавите AlertA
в прототип конструктора ObjA
, он будет определен для каждого экземпляра ObjA
. Последнее в этом случае более эффективно, поскольку оно назначается только один раз, тогда как локальный метод назначается каждый раз, когда вы создаете экземпляр ObjA
.
Таким образом, используя this.AlertA
в:
var A = new ObjA,
B = new ObjA,
C = new ObjA;
для A, B и C конструктор должен добавить метод AlertA
. AlertB
, с другой стороны, добавляется только один раз. Вы можете проверить, что с помощью:
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!