关于原型链中的instanceof探索

原型链中的instanceof探索

记录一下今天所学JS原型链中关于instanceof判定的探索。


本人也在学习中,欢迎各位同学的指正!
关于原型链中的instanceof探索
理解如下:
A是一个实例,B是一个构造函数
B只能走一步,找到B.prototype
而A若有__proto__,则可以一直向下寻找,直到找不到为止。

举例如下,判断两个instanceof语句的判定结果。
f1 instanceof Foo 图示解析如下
关于原型链中的instanceof探索
f1 instanceof Object 图示解析如下
关于原型链中的instanceof探索


举例2
分别判断下面的语句的正确与否。
关于原型链中的instanceof探索
执行结果截图如下:
关于原型链中的instanceof探索
分析如下:

  1. Object instanceof Function
    True
    关于原型链中的instanceof探索
    这里的__proto__是因为Object()是new Function()产生的,因此他也是Function函数的实例对象,进而有__proto__属性。

  1. Object instanceof Object
    True
    关于原型链中的instanceof探索

  2. Function instanceof Function
    True
    关于原型链中的instanceof探索
    因为Function是 new自己产生的,因此才有Function()的两个原型指向同一个。


  1. Function instanceof Object
    True
    关于原型链中的instanceof探索

  1. Object instranceof Foo
    False
    (Function instranceof Foo)同理也为false

关于原型链中的instanceof探索


整个原型链如图:
关于原型链中的instanceof探索
关于原型链中的instanceof探索