You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ES5/ES5.1环境中获取对象的类名?

ES5.1(JerryScript/Fitbit环境)中获取对象类名的方案

在ES6中可以通过.constructor.name获取对象的类名,但在Fitbit采用的ES5.1轻量引擎JerryScript中,不仅ES6的class语法无法直接运行,constructor.name也会返回undefined。比如你尝试的这段ES6代码:

class something {
  constructor() {
    console.log(this.constructor.name);
  }
}

new something();

预期输出something,但实际返回undefined——核心原因是JerryScript不支持ES6 class语法,也未实现函数的name属性。

方案1:手动为构造函数添加name属性

ES5中用构造函数模拟类,手动给构造函数添加name属性,就能实现类似ES6的效果:

function Something() {
  console.log(this.constructor.name);
}
// 手动添加name属性
Something.name = 'Something';

new Something(); // 输出 "Something"

方案2:从构造函数的字符串表示中提取类名

如果不想手动维护name属性,可以通过Function.prototype.toString()获取构造函数的字符串,再用正则提取函数名:

function getConstructorName(obj) {
  const funcString = obj.constructor.toString();
  // 匹配"function 函数名(...)"格式中的函数名
  const nameMatch = funcString.match(/^function\s+([^\s(]+)/);
  return nameMatch ? nameMatch[1] : 'Anonymous';
}

function Something() {
  console.log(getConstructorName(this));
}

new Something(); // 输出 "Something"

注意:如果构造函数是匿名函数,或者代码经过压缩混淆,这种方法可能失效,但Fitbit开发场景下一般不会有这类问题。

方案3:在实例中直接定义类名字段

如果只需要在实例中获取类名,也可以在构造函数内部直接给实例添加className属性:

function Something() {
  this.className = 'Something';
  console.log(this.className);
}

new Something(); // 输出 "Something"

内容的提问来源于stack exchange,提问作者My1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:44:59