This和Prototype定義方法的區(qū)別

This和Prototype

this 是指代上下文中的this對(duì)象

  1. 利用this實(shí)現(xiàn)的方法,可以訪問(wèn)類(lèi)中的私有變量和私有方法。而利用原型對(duì)象實(shí)現(xiàn)的方法,無(wú)法訪問(wèn)類(lèi)中的私有變量和方法

    function Person(x){
      this.x = x; //變量x
      var a = "this is private";  //這個(gè)是Person中的私有變量
      //this 實(shí)現(xiàn)的方法
      this.hello = function() {
        console.log(a)
      }
    }
    //通過(guò)prototype實(shí)現(xiàn)的原型對(duì)象上的方法
    Person.prototype.say = function(){
      console.log(a)
    }
    // 生成實(shí)例
    var person1 = new Person(1)
    person1.hello()         // "this is private"
    person1.say()           // ReferenceError: a is not defined
    
  2. 實(shí)例訪問(wèn)對(duì)象的屬性或者方法時(shí),將按照搜索原型鏈prototype chain的規(guī)則進(jìn)行。首先查找自身的靜態(tài)屬性、方法,繼而查找構(gòu)造上下文的可訪問(wèn)屬性、方法,最后查找構(gòu)造的原型鏈。

    function Test(){
      this.test = 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”定義的另一個(gè)不同點(diǎn)是在內(nèi)存中占用空間不同。使用“this”關(guān)鍵字,實(shí)例初始化時(shí)為每個(gè)實(shí)例開(kāi)辟構(gòu)造方法所包含的所有屬性、方法和所需空間,而使用prototype定義的,由于“prototype”實(shí)際上是指向父級(jí)的引用,因此在初始化和存儲(chǔ)上比“this”節(jié)約資源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容