一、所有构造器/函数的__proto__
都指向 Function.prototype
他只是个空函数
Number.__proto__ === Function.prototype
Boolean.__proto__ === Function.prototype
String.__proto__ === Function.prototype
Object.__proto__ === Function.prototype
Function.__proto__ === Function.prototype
Array.__proto__ === Function.prototype
RegExp.__proto__ === Function.prototype
Error.__proto__ === Function.prototype
Date.__proto__ === Function.prototype
- JavaScript中有内置(build-in)构造器/对象共计12个(ES5中新加了
JSON
),这里列举了可访问的8个构造器。剩下如Global不能直接访问,Arguments仅在函数调用时由JS
引擎创建 - Math,JSON是以对象形式存在的,无需new。它们的
__proto__
是Object.prototype
Math.__proto__ === Object.prototype
JSON.__proto__ === Object.prototype
- 上面说的“所有构造器/函数”当然包括自定义的。如下:
function Person() {}
var Man = function() {}
console.log(Person.__proto__ === Function.prototype)
console.log(Man.__proto__ === Function.prototype)
- 这说明所有的构造器都来自于Function.prototype,甚至包括根构造器Object及Function自身,所有构造器都继承了Function.prototype的属性及方法。如length、call、apply、bind(
ES5
) - Function.prototype也是唯一一个
typeof XXX.prototype
为 “function”的prototype。其它的构造器的prototype都是一个对象。
console.log(typeof Function.prototype)
console.log(typeof Object.prototype)
console.log(typeof Number.prototype)
console.log(typeof Boolean.prototype)
console.log(typeof String.prototype)
console.log(typeof Array.prototype)
console.log(typeof RegExp.prototype)
console.log(typeof Error.prototype)
console.log(typeof Date.prototype)
- 知道了所有构造器(含内置及自定义)的
__proto__
都是Function.prototype
,那Function.prototype
的__proto__
是谁呢?
console.log(Function.prototype.__proto__ === Object.prototype)
- 这说明所有的构造器也都是一个普通
JS
对象,可以给构造器添加/删除属性等。同时它也继承了Object.prototype
上的所有方法:toString
、valueOf
、hasOwnProperty
等 - 最后Object.prototype的
__proto__
是谁?
Object.prototype.__proto__ === null