原型對象與原型鏈

一、什麼是原型對象?

舉個很好理解的例子:愛迪生髮明電燈泡先畫圖紙函數

按照圖紙嘗試製做電燈泡,也許失敗繼續畫新圖紙……成功製做了電燈泡this

燈泡圖紙  第一個電燈泡 spa

愛迪生帶着燈泡圖紙 ,搭建了 燈泡工廠 ,燈泡產品才批量生產,並進入千家萬戶prototype

燈泡圖紙記錄了燈泡的相關信息 由愛迪生實驗室產生的 不是燈泡工廠中產生的3d

燈泡工廠就比如產生對象的 構造器/類orm

燈泡產品: 就比如由構造器實例化出來的對象對象

燈泡產品是根據燈泡圖紙製做的blog

燈泡產品是由工廠製做的不是由圖紙製做的繼承

圖紙由愛迪生實驗室中產生的 不是工廠中產生的。原型鏈

二、構造器訪問原型對象

能夠相定義函數同樣定義構造器

例如:function Light(){

      this.price=20;

        }

這樣就至關於定義了一個構造器。構造器.prototype能夠訪問原型對象

三、普通對象能夠訪問原型對象

普通對象.__proto__訪問原型對象

例如:先經過2例子的構造器建立一個普通對象

    var li=new Light();

    li.__proto__;

四、原型對象能夠訪問構造器

原型對象.constructor 訪問構造器

例如:經過3例子的原型對象訪問構造器

   li.__proto__.constructor或者Light.prototype.constructor

 

 五、原型示意圖

六、原型鏈示意圖

在系統中,原型對象之間就存在這樣一種一環扣一環的引用關係

這樣的一種一環扣一環的結構就被稱爲原型鏈而且這個鏈條有終點,這個終點就是null

 

 

七、原型鏈的訪問原則

 

 當試圖訪問一個對象身上的屬性時,就會使用原型鏈訪問原則:

1、首先在當前對象身上查找屬性,若是有,就直接使用

二、若是沒有,就在該對象的原型對象身上繼續查找該屬性,若是有直接使用

3、若是沒有,就在原型的原型身上繼續查找該屬性,若是有直接使用

直到找到原型鏈的終點(null),依然沒有,就返回undefined;

八、原型繼承

 

可是你須要注意:若是把數據放在Object{}原型對象上,不但Light對象能訪問,甚至字符串和數值也能訪問,

因此使用原型鏈繼承時,應該要注意把數據放在原型鏈的近處,避免數據污染

相關文章
相關標籤/搜索