在 JavaScript 中,可以使用原型链来实现类似于 instanceOf 的功能。instanceOf 实际上是检查一个对象的原型链中是否存在指定的构造函数。
下面是一个简单的 JavaScript 函数,用于实现 instanceOf:
function myInstanceOf(obj, constructor) {
// 加上异常处理
if(['object', 'function'].includes(typeof obj) || obj === null) return false;// 非有效对象\函数
let proto = Object.getPrototypeOf(obj);
while (proto !== null) {
if (proto === constructor.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
通过调用 myInstanceOf(obj, constructor) 来检查 obj 是否是 constructor 的实例。例如:
class MyClass {}
const obj = new MyClass();
console.log(myInstanceOf(obj, MyClass)); // true
console.log(myInstanceOf(obj, Array)); // false
let Fn = function () { }
let p1 = new Fn()
console.log(myInstanceOf({}, Object)) // true
console.log(myInstanceOf(p1, Fn)) // true
console.log(myInstanceOf({}, Fn)) // false
console.log(myInstanceOf(null, Fn)) // false
console.log(myInstanceOf(1, Fn)) // false
console.log(myInstanceOf(function a() {}, Function)) // true