如何获取JavaScript实例对应的构造函数名称
自定义构造函数实例的类型识别方案
问题描述
- 业务中定义了
Apples()、Pears()两个构造函数,所有通过new Apples()、new Pears()生成的实例会统一存入数组管理 - 遍历数组筛选
Apples实例时,无法准确判定取出对象的对应类型 - 临时处理方案是在每个构造函数内手动添加
this.type = "Apples"/this.type = "Pears"标识字段,这种写法冗余且维护成本高——Chrome调试器本身就可以直接识别对象类型,说明存在原生可用的判断逻辑 - 曾尝试调用原型方法判断类型:
var prot = Object.prototype.toString.call(arrayEntry(i))
该方法返回结果固定为[object Object],无法区分不同自定义构造函数生成的实例,不满足需求。
可行实现
通过Object.getPrototypeOf()获取待判断对象的原型,原型上的constructor属性指向生成该实例的构造函数,读取构造函数的name属性即可拿到准确的类型名称,可封装为通用工具函数:
function getClassName(obj) { return Object.getPrototypeOf(obj).constructor.name; }
该方法返回的类型结果和Chrome调试器识别展示的对象类型完全一致,遍历数组时直接比对函数返回值和目标构造函数名即可完成筛选,不需要在每个构造函数内额外硬编码类型标识。
内容的提问来源于stack exchange,提问作者A Masters
相关产品推荐
相关产品推荐

