原型和原型鏈總結

  1. 凡是通過 new Function() 創建的對象都是函數對象,其他的都是普通對象。
  2. 實例的構造函數屬性(constructor)指向構造函數。(實例沒有的屬性,js會嘗試往原型對象上找,原型對象上沒有,再往原型對象的-proto-(Object.prototype)上找,最終會找到Object.prototype._proto_(他就是原型鏈的終點null),找到就返回對應的值,沒找到就返回undefined)
  3. 每個對象都有 __proto__ 屬性,但只有函數對象纔有 prototype 屬性。
  4. 原型對象(Person.prototype)是 構造函數(Person)的一個實例。(Person.prototype instanceof Person 爲 false)
  5. 原型對象其實就是普通對象(但 Function.prototype 除外,它是函數對象,但它很特殊,他沒有prototype屬性(前面說道函數對象都有prototype屬性))
  6. 原型對象是用來做什麼?主要作用是用於繼承。
  7. this 在函數執行時指向實例。
  8. null作爲一個基本數據類型爲什麼會被typeof運算符識別爲object類型呢? 這是因爲javascript中不同對象在底層都表示爲二進制,而javascript 中會把二進制前三位都爲0的判斷爲object類型,而null的二進制表示全都是0,自然前三位也是0,所以執行typeof時會返回'object。這是個歷史遺留feature(or bug)。
  9. Object.create()這個方法本來就是用來創建無原型對象的 顧名思義 其實也就是沒有__proto__
  10. Object.prototype.__proto__ === null
  11. 所有函數對象的_proto_都指向Function.prototype,它是一個空函數(Empty function)

  12. Math,JSON是以對象形式存在的,無需new。它們的_proto_是Object.prototype

  13. 所有對象的 __proto__ 都指向其構造器的 prototype

  14. Object.__proto__ === Function.prototype // true

  15. Function.__proto__ === Function.prototype // true

  16. Function.prototype.__proto__ === Object.prototype

  17. 原型和原型鏈是JS實現繼承的一種模型。
  18. 原型鏈的形成是真正是靠__proto__ 而非prototype

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章