構造函數和原型


      function Student(name, age) {
        this.name = name
        this.age = age
      }
      Student.prototype = {
        constructor: Student,
        study: function() {
          console.log('在學習')
        }
      }
      var zs = new Student('張三', 18)

我們先來看一張圖

 

 在這張圖里Student構造函數的prototype指向Student原型對象,Student原型對象又指向Student構造函數,zs對象.__proto__指向的是Student原型對象。這就是構造函數、實例和原型對象三角關系。

那么只要是個對象,就有__proto__這個屬性,那么Student原型對象又指向誰呢?

可以打印一下console.log(Student.prototype.__proto__)

 

可以看到指向的是Object原型對象,這個原型對象是由Object創建而來的。

那么Object原型對象的__proto__又指向誰呢?

console.log(Object.prototype.__proto__) // null

輸出的是null,所以指向的是null,這就構成了原型鏈。

所以在訪問對象成員的時候順序應該是先訪問zs對象是否存在這個成員,如果沒有,就到Student原型上查看是否有這個成員,如果沒有,就到Object原型上查看是否有這個成員,如果再沒有,就返回null

 

 


免責聲明!

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



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