为什么Object.prototype.isPrototypeOf(Function)是true

本文出至(讨论): http://jsvm.org/forums/1947/ShowPost.aspx#1947


js 中 Object 和 Function 的关系是微妙的,他们互为对方的一个“实例”。
Function  instanceof  Object  和 Object  instanceof  Function  都是 true

1。我们可以认为 Object 是一个特殊的“类”,而这里的“类”即:function

于是便可以理解为: Object = function () {}  或 Object = new Function(); 即: ObjectFunction 的一个实例,所以,Object 原型链中便包含 Function.prototype,得出: Function.prototype.isPrototypeOf(Object)  为 true

2。同时,js中,所有对象(不包括js语言外部对象)都可视为是 Object 的一个实例, Function 不例外,Function.prototype 亦不例外,于是有Function = new Object();  Function.prototype = new Object(), 于是 Object.prototype.isPrototypeOf(Function)  和 Object.prototype.isPrototypeOf(Function.prototype) 都为 true 了

3。补充:Function 本身也是一个“类”,然而,所有“类”都是Funciton的实例,于是 Function instanceof Function; 为true。同时,所有对象都是 Object 类的实例,Object 本身也是一个对象,所有又有 Object instanceof Object 也为 true。另外,还可以认为 Funciton 类型是 Object  类型的一个“派生类”,class Function 继承了class Object ,是 class Object 的一个“子类”。

更多内容请查看:http://jsvm.org/forums/1947/ShowPost.aspx#1947

你可能感兴趣的:(prototype)