javascript 中 this 與 prototype 的3個區別


區別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”節約資源。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM