js原型(instanceof)

193 阅读1分钟

判断值类型用typeof,判断构造函数的实例对象用instanceof
obj instanceof Fn原理:
右边构建函数(Fn)的原型对象(prototype),是否在左边对象(obj)的原型链上

//原型链:obj ---> Object.prototype ---> null
let obj = {};
obj instanceof Object //true

//原型链:arr ---> Array.prototype ---> Object.prototype ---> null
let arr = [];
arr instanceof Array //true
arr instanceof Object //true

//原型链:f1 ---> Fn.prototype ---> Object.prototype ---> null
function Fn() {}
let f1 = new Fn();
f1 instanceof Fn //true
f1 instanceof Object //true

原型链上的对象也可以判断,就是有点绕,看着图理清了也不复杂。

//原型链:Object() ---> Function.prototype ---> Object.prototype ---> null
Object instanceof Function // true
Object instanceof Object //true
//原型链:Function() ---> Function.prototype ---> Object.prototype ---> null
Function instanceof Function // true
Function instanceof Object //true

也可以使用 isPrototypeOf 替代 instanceof

v instanceof Vehicle
// 等同于
Vehicle.prototype.isPrototypeOf(v)

//原型链:obj ---> Object.prototype ---> null
let obj = {};
obj instanceof Object //true
Object.prototype.isPrototypeOf(obj) //true

参考文章:
深入理解javascript原型和闭包(完结)
网道-JavaScript 教程-对象继承
MDN-JavaScript继承与原型链

后话: 本文是学习笔记,方便自己总结记忆,详细原理可查看参考文章。有什么错误的地方,请各位大佬指正。