原型、原型對象、對象原型、原型鏈相關(guān)問題

怎么創(chuàng)建一個對象?

        1.字面量的方式
                    `var obj = {}`
         2.new方式
                     `var obj = new Object()`
         3.構(gòu)造函數(shù)的方式
                     ```
                          function Star(uname, age) {
                             this.uname = uname,
                             this.age = age,
                             this.sing = function() {
                                   console.log(this.uname + "會唱歌");
                             }
                           }
                           var lhd = new Star("劉德華的哥哥", 19)
                     ```
              構(gòu)造函數(shù)創(chuàng)建實例對象的時候,每個實例對象都會開辟一個新的額內(nèi)存空間存sing方法,但是這些方法都是一樣的,就造成了內(nèi)存空間的浪費。所以引入了prorotype存這個相同的方法。

prorotype

  JavaScript 規(guī)定,每一個構(gòu)造函數(shù)都有一個prototype 屬性,指向另一個對象。注意這個prototype就是一個對象,這個對象的所有屬性和方法,都會被構(gòu)造函數(shù)所擁有。我們可以把那些不變的方法,直接定義在 prototype 對象上,這樣所有對象的實例就可以共享這些方法。

proto

    對象原型,對象都會有一個屬性 __proto__ 指向構(gòu)造函數(shù)的 prototype 原型對象,是系統(tǒng)自動添加的。
      __proto__對象原型和原型對象 prototype 是等價的
      __proto__對象原型的意義就在于為對象的查找機制提供一個方向,或者說一條路線,但是它是一個非標準屬性,因此實際開發(fā)中,不可以使用這個屬性,它只是內(nèi)部指向原型對象 prototype。
img2.png

constructor構(gòu)造函數(shù)

對象原型( __proto__)和構(gòu)造函數(shù)(prototype)原型對象里面都有一個屬性 constructor 屬性 ,constructor 我們稱為構(gòu)造函數(shù),因為它指回構(gòu)造函數(shù)本身。

constructor 主要用于記錄該對象引用于哪個構(gòu)造函數(shù),它可以讓原型對象重新指向原來的構(gòu)造函數(shù)。如果我們修改了原來的原型對象,給原型對象賦值的是一個對象,則必須手動的利用constructor指回原來的構(gòu)造函數(shù)如:

function Star(uname, age) {
     this.uname = uname;
     this.age = age;
 }
 // 很多情況下,我們需要手動的利用constructor 這個屬性指回 原來的構(gòu)造函數(shù)
 Star.prototype = {
 // 如果我們修改了原來的原型對象,給原型對象賦值的是一個對象,則必須手動的利用constructor指回原來的構(gòu)造函數(shù)
   constructor: Star, // 手動設(shè)置指回原來的構(gòu)造函數(shù)
   sing: function() {
     console.log('我會唱歌');
   },
   movie: function() {
     console.log('我會演電影');
   }
}
var zxy = new Star('張學友', 19);
console.log(zxy)

原型鏈

每一個實例對象又有一個__proto__屬性,指向的構(gòu)造函數(shù)的原型對象,構(gòu)造函數(shù)的原型對象也是一個對象,也有__proto__屬性,這樣一層一層往上找就形成了原型鏈。
img5.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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