【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继承

相关文章
相关标签/搜索