说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
请你编写一个函数,检查给定的值是否是给定类或超类的实例。
可以传递给函数的数据类型没有限制。例如,值或类可能是 undefined 。
示例 1:
输入:func = () => checkIfInstance(new Date(), Date) 输出:true 解释:根据定义,Date 构造函数返回的对象是 Date 的一个实例。
示例 2:
输入:func = () => { class Animal {}; class Dog extends Animal {}; return checkIfInstance(new Dog(), Animal); } 输出:true 解释: class Animal {}; class Dog extends Animal {}; checkIfInstanceOf(new Dog(), Animal); // true Dog 是 Animal 的子类。因此,Dog 对象同时是 Dog 和 Animal 的实例。
示例 3:
输入:func = () => checkIfInstance(Date, Date) 输出:false 解释:日期的构造函数在逻辑上不能是其自身的实例。
示例 4:
输入:func = () => checkIfInstance(5, Number) 输出:true 解释:5 是一个 Number。注意,"instanceof" 关键字将返回 false。
解题思路
首先会检查 obj 是否为 undefined 或 null,如果是,则直接返回 false。
接下来,函数会通过循环遍历对象的原型链,判断对象的构造函数是否与 classFunction 相等。如果相等,表示 obj 是 classFunction 的一个实例,函数返回 true。
如果遍历完整个原型链都没有找到匹配的构造函数,则表示 obj 不是 classFunction 的实例,函数返回 false。
这个函数可以用来判断一个对象是否是某个类的实例,可以在 JavaScript 中进行类型检查或判断对象的继承关系。
AC代码
/** * @param {any} object * @param {any} classFunction * @return {boolean} */ var checkIfInstanceOf = function (obj, classFunction) { if (obj === undefined || obj === null) return false; while (obj !== null) { if (obj.constructor === classFunction) return true; obj = Object.getPrototypeOf(obj); } return false; };
公众号
关注公众号『前端也能这么有趣
』,获取更多有趣内容。
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。