原型链中最纠结的Function和Object关系。

504 阅读1分钟

在javascript中,什么都是对象。数组、函数都是对象。那么Function、Object这两个内置对象又有什么联系呢?

        console.log(Function);
        console.log(Object);

image.png
这是两个构造函数。

        console.log(Function.prototype);
        console.log(Object.prototype);

image.png
两个构造函数的显示原型。

        console.log(Function.__proto__);
        console.log(Object.__proto__);;

image.png
两个函数的隐式原型。是相同的,都是Function.prototype。因为构造函数嘛,也是函数。所以Function的显示原型就是它们的原型链上一层。所有构造函数的隐式原型都是Function.prototype。
接下来我们再看,

        console.log(Function.prototype.__proto__);
        console.log(Object.prototype);
        console.log(Function.prototype.__proto__ === Object.prototype);

image.png Function.prototype.__proto__等于Object.prototype。也很好理解,任何原型对象的隐式原型__proto__指向Object的显示原型,因为prototype也是对象嘛。
终结理解

         console.log(Function.__proto__ === Function.prototype);
         console.log(Object.prototype.__proto__ === null);

image.png
Function的显示原型和隐式原型相等的,以为javascript一切皆对象,所有对象的最终指向都是Object.prototype,而Object.prototype又最终指向了null。


记录记录!