JavaScript 基於原型鏈的繼承

來源:互聯網
上載者:User

標籤:自己   zh-cn   lin   cts   表示   log   查看   ext   web   

JavaScript 對象是動態屬性“包”(指其自己的屬性)。JavaScript 對象有一個指向一個原型對象的鏈。當試圖訪問一個對象的屬性時,它不僅僅在該對象上搜尋,還會搜尋該對象的原型,以及該對象的原型的原型,依次層層向上搜尋,直到找到一個名字匹配的屬性或到達原型鏈的末尾。

遵循ECMAScript標準,someObject.[[Prototype]] 符號是用於指向 someObject的原型。從 ECMAScript 6 開始,[[Prototype]] 可以通過Object.getPrototypeOf()Object.setPrototypeOf()訪問器來訪問。這個等同於 JavaScript 的非標準但許多瀏覽器實現的屬性 __proto__

但它不應該與建構函式 func 的 prototype 屬性相混淆。被建構函式建立的執行個體對象的 [[prototype]] 指向 func 的 prototype 屬性。Object.prototype 屬性工作表示Object的原型對象。

這裡示範當嘗試訪問屬性時會發生什麼:

// 讓我們假設我們有一個對象 o, 其有自己的屬性 a 和 b:// {a: 1, b: 2}// o 的 [[Prototype]] 有屬性 b 和 c:// {b: 3, c: 4}// 最後, o.[[Prototype]].[[Prototype]] 是 null.// 這就是原型鏈的末尾,即 null,// 根據定義,null 沒有[[Prototype]].// 綜上,整個原型鏈如下: // {a:1, b:2} ---> {b:3, c:4} ---> nullconsole.log(o.a); // 1// a是o的自身屬性嗎?是的,該屬性的值為1console.log(o.b); // 2// b是o的自身屬性嗎?是的,該屬性的值為2// 原型上也有一個‘b‘屬性,但是它不會被訪問到.這種情況稱為"屬性遮蔽 (property shadowing)"console.log(o.c); // 4// c是o的自身屬性嗎?不是,那看看原型上有沒有// c是o.[[Prototype]]的屬性嗎?是的,該屬性的值為4console.log(o.d); // undefined// d是o的自身屬性嗎?不是,那看看原型上有沒有// d是o.[[Prototype]]的屬性嗎?不是,那看看它的原型上有沒有// o.[[Prototype]].[[Prototype]] 為 null,停止搜尋// 沒有d屬性,返回undefined

 

 

原來的連結:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

JavaScript 基於原型鏈的繼承

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.