1. 程式人生 > >2. 原型鏈_作用域鏈_預處理_預解析

2. 原型鏈_作用域鏈_預處理_預解析

1. 談談原型

能夠實現繼承,物件查詢屬性的規則

例項物件的隱式原型的值 為其 對應建構函式的 顯式原型的值

  • prototype 顯示原型屬性

所有函式都有顯示原型屬性

  • __proto__ 隱式原型屬性

所有例項物件都有隱式原型屬性

所有函式都是 Function 的例項

Function 是通過 new 自己產生的例項

2. 談談原型

 由多個隱式原型屬性構成的鏈狀結構就是原型鏈

作用: 用來查詢物件的 屬性/方法

先自身找,找不到再去 __proto__ 找,最終找到 Object.prototype.__proto__ 上,返回 undefined

3. 作用域鏈

多個上下級關係的作用域形成的鏈, 它的方向是從小向大的(從內到外)

作用:查詢變數的規則

先自身作用域找,找不到再上一級找,最終來到全域性作用域,找不到就報錯(xxx is not defined)

4. 預解析、預處理做了什麼事?

  • 全域性程式碼:
  • js 引擎在將要執行全域性程式碼之前,建立一個全域性執行上下文物件 window
  • 將 var 關鍵字宣告的變數,新增為 window 屬性,值為 undefined
  • 將 function 關鍵字宣告的函式,新增 window 方法,值為函式體
  • 確定全域性 this 指向,指向為 window
  • 函式程式碼:
  • js 引擎在將要執行函式程式碼之前,建立一個函式執行上下文物件(沒辦法直接操作)
  • 將 var 關鍵字宣告的變數,新增為函式執行上下文物件屬性,值為undefined
  • 將 function 關鍵字宣告的函式,新增函式執行上下文物件方法,值為函式體
  • 將形參賦值為實參,新增為函式執行上下文物件的屬性
  • 將傳入的實參新增到 arguments 中, 新增為函式執行上下文物件的屬性
  • 確定 this 的指向, 新增為函式執行上下文物件的屬性

5. 完整原型圖

https://www.cnblogs.com/tianxiaxuange/p/9800827.html