js高级_102、探索instanceof

instanceof

a instanceof A
作用:判断左边这个对象a(实例或属性)是不是右边这个类型(构造函数)A的实例,左边一般是对象的属性或对象的实例,右边一般是构造函数或对象,主要是通过左边的实例的隐式原型属性一直往原型链中找,一直都是通过原型对象的隐式原型属性往原型链中找,右边也通过构造函数的显示原型属性往原型链中找,如果左边和右边都找到尽头了还没有相交的部分,则左边的实例不是右边构造函数的实例,除非他们的原型在原型链中有相交的才相等,相交代表相等。左边是实例,根据隐式原型属性找,右边是对象,根据显示原型属性找,两边各自从自己的方向出发。

1. instanceof是如何判断的?

*表达式: A instanceof B

*如果B函数的显式原型对象在A对象的原型链上, 返回true, 否则返回false

2. Function是通过new自己产生的实例

案例一

function Foo() {  }
  var f1 = new Foo()
  console.log(f1 instanceof Foo) // true
  console.log(f1 instanceof Object) // true

案例一的解题图如下

console.log(f1 instanceof Foo)

image

console.log(f1 instanceof Object)

image

案例二

    Function Object() {} 或 Object = new Function();
            //Object():是实例 a          Function()是构造函数B
            console.log(Object instanceof Function) // true
            //Object():是实例 a          Object()是构造函数B,即Object()是a又是B
            console.log(Object instanceof Object) // true
            //Function():是实例 a          Function()是构造函数B,即Function()是a又是B
            console.log(Function instanceof Function) // true
            //Function():是实例 a          Object()是构造函数B
            console.log(Function instanceof Object) // true
              function Foo() {}
              //Object():是实例 a          Foo()是构造函数B
              console.log(Object instanceof  Foo) // false
console.log(Object instanceof Function) // true讲解如下图

image

console.log(Object instanceof Object) // true讲解如下图

image

console.log(Function instanceof Function) // true讲解如下图

image

console.log(Function instanceof Object) // true讲解如下图

image

console.log(Object instanceof Foo) // false讲解如下图

image

总结,要背下来

实例对象的隐式原型属性对应该实例对象的构造函数的显示原型属性

函数Function()的原型对象默认是一个空的Object实例

所有函数的原型对象,它默认都是Object构造函数的实例

大写Function是通过new Function()产生的,而new Function()产生的所有实例的隐式原型属性都指向同一个空Object对象的实例,new Function()自身创建这个构造函数的时候就创建了一个一个空Object对象的实例,这才导致所有的函数的隐式原型属性都指向同一个空Object对象的实例。
image

posted @ 2022-03-13 10:59  青仙  阅读(33)  评论(0编辑  收藏  举报