Node.js中是否存在类似PHP get_class的函数检测JavaScript对象精确类型?
在Node.js中获取JavaScript对象的精确类名(类似PHP的get_class)
当然有办法实现类似PHP get_class 的功能!Node.js里没有直接同名的原生函数,但我们有几种可靠的方式来获取对象的精确类名,完全能满足你'FooClass' === getClass(instance)的需求。
方法一:直接使用constructor.name
这是最简单高效的方式,对于你给出的类定义和实例,直接访问实例的constructor.name就能拿到类名:
function FooClass() { this.data = { foo: null, bar: null }; } let instance = new FooClass(); console.log(instance.constructor.name); // 输出 'FooClass'
不过要注意:如果你的代码经过了压缩混淆,类的name属性可能会被替换成无意义的短字符串(比如a),这种场景下就需要用更健壮的方法。
方法二:从Object.prototype.toString提取类名
Object.prototype.toString会返回一个格式为[object ClassName]的字符串,我们可以用正则从中提取出类名,这个方法兼容性拉满,而且不受代码压缩的影响:
function getClass(obj) { const typeStr = Object.prototype.toString.call(obj); const matchResult = typeStr.match(/\[object (\w+)\]/); return matchResult ? matchResult[1] : null; } // 测试你的实例 console.log(getClass(instance)); // 输出 'FooClass'
这个方法还能正确识别各种内置对象:
console.log(getClass([])); // 输出 'Array' console.log(getClass(new Date())); // 输出 'Date' console.log(getClass(null)); // 输出 'Null'
补充:ES6 Class场景也适用
如果用ES6的class语法定义类,上述两种方法同样有效:
class BarClass {} const barInstance = new BarClass(); console.log(barInstance.constructor.name); // 输出 'BarClass' console.log(getClass(barInstance)); // 输出 'BarClass'
内容的提问来源于stack exchange,提问作者sensorario
相关产品推荐
相关产品推荐

