在Javascript中,这两种向对象添加函数的方法有什么区别吗?出于任何原因,一个人更好吗?
function ObjA() {
this.AlertA = function() { alert("A"); };
}
ObjA.prototype.AlertB = function() { alert("B"); };
var A = new ObjA();
A.AlertA();
A.AlertB();
Run Code Online (Sandbox Code Playgroud)
Koo*_*Inc 16
当然有区别.如果定义this.AlertA,则为实例定义一个本地方法ObjA.如果添加AlertA到ObjA 构造函数的原型,则为每个实例定义它ObjA.在这种情况下,后者更有效,因为它只分配了一次,而每次创建实例时都会分配本地方法ObjA.
所以用this.AlertA在:
var A = new ObjA,
B = new ObjA,
C = new ObjA;
Run Code Online (Sandbox Code Playgroud)
对于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!
Run Code Online (Sandbox Code Playgroud)