http://www.bjcan.com/hengxing/readlou.asp?id=1236
利用 this 實現的公共方法中可以訪問類的私有成員(用 var 聲明的變量),私有方法(用 function 直接定義的方法);
利用原型擴展實現的方法中,無法調用私有成員和變量。
例子如下所示(把其中注釋掉的兩行恢復就可以看到區別):
?function T(name) {
??? this.Name = name;
??? var x = 5;
????
??? function privateFunc() {
??????? alert('in private method: do sometheing');
??? }
????
??? this.PublicFunc = function() {
??????? // 可以調用私有方法,訪問私有成員變量。
??????? privateFunc();
??????? alert('x = ' + x);
??????? alert('in public method: do something else.');
??? }
}
?
//var t = new T('t1');
//t.PublicFunc();
?
T.prototype.PublicFunc2 = function() {
??? alert('in public method 2.');
??? // 下面兩行都會出錯。在利用 prototype 擴展的方法里無法調用對象的私有方法,也訪問不到通過 var 定義的私有成員。
??? // alert(x);
??? // privateFunc();
}
?
var t2 = new T('t2');
t2.PublicFunc();
t2.PublicFunc2();