首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

深度解析:JavaScript 中 Function 為什麼是 Object 的實例?

     編輯:程式設計疑難解答

現象確認

console.log(Function instanceof Object); // true

原型鏈圖解


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

instanceof 內部算法


function instance_of(L, R) {
    let O = R.prototype;   // 取右側顯式原型
    L = L.__proto__;       // 取左側隱式原型
    while (true) {
        if (L === null) return false;
        if (O === L) return true;  // 關鍵判斷
        L = L.__proto__;
    }
}

驗證過程

  1. L = Function.__proto__ = Function.prototype
  2. O = Object.prototype
  3. 第一次循環:L (Function.prototype) !== O (Object.prototype)
  4. L = L.__proto__ = Object.prototype
  5. 第二次循環:L === O → 返回 true

本質原因

JavaScript 設計中,**函數是一等公民**,本身也是對象。Function.prototype 繼承自 Object.prototype,因此 Function 作為構造函數,其隱式原型鏈最終指向 Object.prototype,滿足 instanceof 判定邏輯。

延伸知識

  • Object instanceof Function 也為 true(Object 是函數構造的)
  • Function instanceof Function 為 true(函數由 Function 構造)
  • 這構成了 JS 原型鏈的「雞生蛋、蛋生雞」閉環,但語言規範保證一致性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved