【js基礎】理清Object、Object.prototype、Function、Function.prototype

Object.prototype.toString.call(something)

上面這段代碼通常被用來判斷變量的類型,相信不少人都很是熟悉
今天coding時用到上面這段代碼,忽然想到 Object.toString 方法,爲啥二者不同呢
ObjecttoString 並非自有屬性,而是繼承屬性
Object 究竟時繼承的誰呢,或者換句話說,Object 時由什麼構造的呢?ui

Object.toString.call([])

爲啥運行上面這段代碼會提示 Function.prototype.toString requires that 'this' be a Functionthis

console.log(Object.__proto__.constructor)        // ƒ Function() { [native code] }
Object.toString === Function.prototype.toString  // true
Object.__proto__ === Function.prototype          // true
Object instanceof Function                       // true

原來執行 Object.toString.call([]) 等同於執行 Function.prototype.toString([])
並且 Object 是由 Function 構造的
那麼 Function 又是由什麼構造的呢prototype

console.log(Function.__proto__.constructor)     // ƒ Function() { [native code] }

咱們看到 Function 是由 Function 構造的
那麼是否是說 Function 就是繼承鏈的最頂層了呢? 答案確定是 不是code

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

咱們看到, Function.prototype_proto__ 指向了 Object.prototype
咱們以前說過, Function 繼承自 Function ,天然 Function.__proto__.__proto__ 是指向 Object.prototype
咱們以前也說過, Object 繼承自 Function,因此Object.__proto__.__proto__ 也是指向 Object.prototype繼承

相關文章
相關標籤/搜索