alert((Object instanceof Function));//true
 alert(Function instanceof Object);//true 对于都输出true,怎么理解

解决方案 »

  1.   


    js 中 Object 和 Function 的关系是微妙的,他们互为对方的一个“实例”。
    Function   instanceof  Object   和 Object   instanceof  Function   都是 true1。我们可以认为 Object 是一个特殊的“类”,而这里的“类”即:function于是便可以理解为: Object = function () {}   或 Object = new Function(); 即: Object 是 Function 的一个实例,所以,Object 原型链中便包含 Function.prototype,得出: Function.prototype.isPrototypeOf(Object)   为 true2。同时,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 的一个“子类”。
      

  2.   

    instanceof 运算符 
    返回一个 Boolean 值,指出对象是否是特定类的一个实例。 
      

  3.   

    关于instanceof:
         假设有一条这样的语句:
         o instanceof c;
         在上面的语句执行过程中,虚拟机会把c.prototype和o的_proto_链上的节点逐个进行比较,如果找到相等的节点,则返回true,否则返回false。
    http://www.cnblogs.com/Qinglong/archive/2009/03/11/1408610.html
      

  4.   

    a instanceof b
    可以理解为:a是b的“子类”。