列表

详情


2618. 检查是否是类的对象实例

请你编写一个函数,检查给定的对象是否是给定类或超类的实例。

可以传递给函数的数据类型没有限制。

 

示例 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 {};
checkIfInstance(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。

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * @param {any} obj * @param {any} classFunction * @return {boolean} */ var checkIfInstanceOf = function(obj, classFunction) { }; /** * checkIfInstanceOf(new Date(), Date); // true */

javascript 解法, 执行用时: 112 ms, 内存消耗: 49.9 MB, 提交时间: 2023-04-17 16:15:09

/**
 * @param {Object} object
 * @param {Function} classFunction
 * @return {boolean}
 */
var checkIfInstanceOf = function(obj, classFunction) {
    if ( classFunction == null ) return false;
    while (obj != null ) {
        const proto = Object.getPrototypeOf(obj);
        if (proto === classFunction.prototype) return true;
        obj = proto;
    }
    return false;
};


/**
 * checkIfInstanceOf(new Date(), Date); // true
 */

typescript 解法, 执行用时: 116 ms, 内存消耗: 51.7 MB, 提交时间: 2023-04-17 16:13:51

function checkIfInstanceOf(obj: any, classFunction: any): boolean {
  if (classFunction == null) return false
  while (obj != null) {
    const proto = Object.getPrototypeOf(obj)
    if (proto === classFunction.prototype) return true
    obj = proto
  }
  return false
}

/**
 * checkIfInstanceOf(new Date(), Date); // true
 */

上一题