instanceof
运算符用于测试构造函数的 prototype
属性是否出现在对象的原型链中的任何位置。
代码示例:
target instanceof constructor;
instanceof
可以检测某个对象是否是另一个对象的 实例。
const Person = function () {};const student = new Person();console.log(student instanceof Person);// true
instanceof
可以检测父类型。
function Person() {}function Student() {}const p = new Person();// 继承原型Student.prototype = p;const s = new Student();console.log(s instanceof Student);// trueconsole.log(s instanceof Person);// true
其他例子:
// 数字类型console.log(1 instanceof Number);// falseconosole.log(Infinity instanceof Number);// falseconsole.log(Number(2) instanceof Number);// 布尔值console.log(true instanceof Boolean);// false// 字符串console.log('' instanceof String);// false// 函数类型const fn = () => console.log('Hello world!');console.log(fn instanceof Function);// true
function simulateInstanceof(left, right) {if (left === null || (typeof left !== 'object' && typeof left !== 'function')) return false;// 递归原型链while (true) {// Object.prototype.__proto__ === nullif (left === null) return false;// 这里重点:当 left 严格等于 prototype 时,返回 trueif (left === right.prototype) return true;left = left.__proto__;}}