typeof是一个运算符,用于确定变量的基本数据类型,例如字符串、数字、布尔值、函数等。
instanceof是一个操作符,用于确定一个对象是否属于一个特定的类或构造函数的实例。它的实现原理是判断一个对象是否是通过一个构造函数创建出来的。具体实现方式是通过判断对象的__proto__属性是否等于构造函数的prototype属性。
以下是模拟实现一个instanceof的示例代码:
function myInstanceof(obj, Constructor) { // 首先获取构造函数的prototype对象 let prototype = Constructor.prototype; // 然后获取对象的原型 let proto = obj.__proto__; // 循环判断对象的原型链是否等于构造函数的prototype对象 while (true) { if (proto === null) { // 如果原型链已经到达顶端,返回false return false; } if (proto === prototype) { // 如果对象的原型链上存在构造函数的prototype对象,返回true return true; } // 继续向上查找原型链 proto = proto.__proto__; } }
使用示例:
function Person() {} const person = new Person(); console.log(myInstanceof(person, Person)); // true console.log(myInstanceof(person, Object)); // true console.log(myInstanceof(person, Date)); // false