http://www.bjcan.com/hengxing/readlou.asp?id=1236
利用 this 實(shí)現(xiàn)的公共方法中可以訪問(wèn)類(lèi)的私有成員(用 var 聲明的變量),私有方法(用 function 直接定義的方法);
利用原型擴(kuò)展實(shí)現(xiàn)的方法中,無(wú)法調(diào)用私有成員和變量。
例子如下所示(把其中注釋掉的兩行恢復(fù)就可以看到區(qū)別):
?function T(name) {
??? this.Name = name;
??? var x = 5;
????
??? function privateFunc() {
??????? alert('in private method: do sometheing');
??? }
????
??? this.PublicFunc = function() {
??????? // 可以調(diào)用私有方法,訪問(wèn)私有成員變量。
??????? 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.');
??? // 下面兩行都會(huì)出錯(cuò)。在利用 prototype 擴(kuò)展的方法里無(wú)法調(diào)用對(duì)象的私有方法,也訪問(wèn)不到通過(guò) var 定義的私有成員。
??? // alert(x);
??? // privateFunc();
}
?
var t2 = new T('t2');
t2.PublicFunc();
t2.PublicFunc2();