🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
请你编写一个函数,检查给定的值是否是给定类或超类的实例。
可以传递给函数的数据类型没有限制。例如,值或类可能是 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 中进行类型检查或判断对象的继承关系。
/**
* @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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。