当然有区别。如果您定义this.AlertA,您正在为ObjA 的实例定义一个本地方法。如果将AlertA 添加到ObjA 构造函数 的原型中,则会为ObjA 的每个实例定义它。在这种情况下,后者效率更高,因为它只分配一次,而每次创建 ObjA 的实例时都会分配一个本地方法。
所以使用this.AlertA in:
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!