JavaScript的原型詳解

來源:互聯網
上載者:User

簡單描述js原型

  原型提供了一群同類對象共用屬性和方法的機制,對象繼承原型的所有屬性和方法(函數)。說白了js是使用原型來實作類別繼承的。

充分理解prototype / __proto__

  初學者確實在這兩個屬性上是不容易分辨清楚地。所以,一個搞前端的朋友說,這兩個屬性完全搞明白了,那js原型也就差不多理解透徹了。那我嘗試闡述一下這兩個屬性(內容總結自他人的結晶和js文檔)。

  prototype:prototype是函數的屬性,它應用的場合是函數被用作建構函式時,如果你想讓子類擁有某型特性,那我們可以直接操作父類(總是感覺父函數貼切)的這個prototype。所以在js的繼承中prototype是父類建構函式的一個屬性,這個屬性指向被建構函式建立的對象(一定要注意prototype是函數的屬性,而不是對象的)

  __proto__:在建立對象的過程中__proto__屬性會指向構建這個對象的函數的prototype屬性。Eg:var a = new Function(); a.__proto__ === Function.prototype。__proto__是所有的對象都擁有的屬性,但是這個屬性被廢棄不提倡使用了。

  執行個體一:

    var A = function () {        this.name = "a";    }    var B = {}    console.log(A.prototype);    console.log(B.prototype);//prototype是函數的屬性,所以這裡列印undefined,大家也就不會奇怪了吧。    console.log(B.constructor.prototype);    console.log(A.__proto__);    console.log(B.__proto__);

  結果如下:

原型鏈

  在js執行過程如果當前使用中的物件沒有這個屬性,那js執行引擎會按照該對象的__proto__屬性一直向上級尋找,直到Object.__proto__,如果還是沒有發現則會返回undefined。上一張圖看看到底是如何尋找的。

Javascript建立對象的步驟

  Javascript建立對象的步驟:(1)、建立新對象;(2)、將該對象的原型指向建構函式prototype所指向的那個原型對象;(3)、將該對象作為this參數調用建構函式。如下:

    function Obj() {    }    var o = {};    Obj.call(o)

  

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.