區別1:
利用 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.');
}
}
區別2:
當訪問對象的屬性或者方法是,將按照搜索原型鏈prototype chain的規則進行。首先查找自身的靜態屬性、方法,繼而查找構造上下文的可訪問屬性、方法,最后查找構造的原型鏈。
例子:
function Test() {
this.text = function() {
alert("defined by this");
}
}
Test.prototype.test = function() {
alert("defined by prototype");
}
var _o = new Test();
_o.test();//輸出“defined by this”
區別3:
“this”與“prototype”定義的另一個不同點是屬性的占用空間不同。使用“this”關鍵字,示例初始化時為每個實例開辟構造方法所包含的所有屬性、方法所需的空間,而使用“prototype”定義,由於“prototype”實際上是指向父級的一種引用,僅僅是個數據的副本,因此在初始化及存儲上都比“this”節約資源。
