原型對象和原型鏈


  原型對象和原型鏈
總的來說:
1、prototype是函數才有的屬性 
2、__proto__是每個對象都有的屬性  
(__proto__不是一個標准屬性,只是部分瀏覽器實現了此屬性,對應的標准屬性是[[prototype]])

 

一、原型對象
 1 ```
 2 function A(){//創建一個構造函數
 3 
 4 }
 5 
 6 A.prototype.testa = "aaaaa";
 7 let a1 = new A();
 8 let a2 = new A();
 9 let a3 = new A();
10 
11 console.log(a1.testa);
12 console.log(a2.testa);
13 console.log(a3.testa);
14 //解釋:通過實例對象來訪問testa,a1、a2、a3都能訪問到原型對象上的方法。
15 (這就是為什么推崇原型下編程)。
16 
17 a1.testa = "bbbbb";
18 //這時候單獨把a1的testa屬性改成“bbbbb”,這只是單純的把a1自己屬性改成“bbbbb”,原型下的屬性是不會受到影響的。
二、原型鏈
 1 [].toString();
 2 console.log(Array.prototype);//原型下有toString方法;
 3 
 4 //但是
 5 function A(){
 6 
 7 }
 8 var a = new A();
 9 console.log(a.toString);//也存在也能使用,但是
10 console.log(a.prototype);//下面沒有toString方法,那他為什么能使用呢?
11 //正是因為原型鏈的存在才能使用原型鏈上的toString方法。
12 
13 console.log(a.prototype.__proto__);//下面九就有toString方法;
14 
15 //強調(a.prototype)原型對象也是一個對象,所以往上找原型對象下的原型對象下就有能夠使用的方法。
16 
17 a.prototype.__proto__ == Object.prototype 
18 //解釋:通俗來說a.prototype是Object的一個實例,也就是new 了一個Object。

 

 

原型鏈圖解:
構造函數的prototype == new出來的對象的__proto__。

 

 

 

 

草圖:

 

 

 


免責聲明!

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



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