前言
我们判断一个实例的类型在JavaScript中经常会用intenceof来判断这个实例是(Object类型)还是(Array类型)还是(Function类型)(返回值是一个True还是一个False
这个 (A intenceof Function) 是如何判断类型的,听我下面深度刨析
(其中A代表一个实例)
一、instanceof是如何判断的?
(1) 表达式: A instanceof B A是实例 B是构造函数
(2) 如果B函数的显示原型对象在A对象的隐式原型链上
(1) 是则返回True (2) 否则返回False
(3) Object是Function的实例
(4) 所有函数的原型对象都是Object的实例(Object除外)
(5) 所有的函数都是Function的实例(包含Function)
(6) Function是通过new直接产生的实例
二、图解
下面判断 a instenceof Object是如何判断的
function func1 (){};
let a = new func1();
console.log(a instenceof Obejct) // true
看以下我手画的图,稍微有点丑
console.log(a instenceof Object) a
就是看Object函数的原型对象是不是在a的隐式原型链上
顺着fun1实例对象的__proto__属性往下找
总结
这节instenceof的判断就讲到这里,下期会讲讲变量提升和函数提升