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

JavaScript中如何获取对象名称?使用this.name返回undefined

解决对象打印时显示变量名的问题

首先得明确一个关键点:JavaScript里的对象本身不会自动记录它被赋值的变量名——变量只是指向这个对象的一个"指针"而已,对象根本不知道自己被哪个变量引用,所以你直接用this.name会返回undefined,因为你的obj1对象里压根没定义这个属性。

那怎么实现你要的效果呢?有几种简单的办法:

1. 手动给对象添加name属性

最直接的方式就是在创建对象时,显式添加一个标识属性(比如叫name),把变量名存进去:

// 创建对象时加入name属性
const obj1 = {
  name: 'obj1',
  result: 6 // 假设你的6是存在这里的结果
};

// 打印时直接使用这个属性
console.log(`The result of the ${obj1.name} is ${obj1.result}`);

这样执行后,控制台就会输出:The result of the obj1 is 6,完全符合你的需求。

2. 如果是在对象方法中使用

要是你是在对象的方法里需要打印这个名称,同样先加name属性,然后用this.name访问就没问题了:

const obj1 = {
  name: 'obj1',
  calculateResult() {
    // 这里是计算得到6的逻辑
    return 6;
  },
  logResult() {
    console.log(`The result of the ${this.name} is ${this.calculateResult()}`);
  }
};

obj1.logResult(); // 输出目标内容

为什么不能自动获取变量名?

补充一句:你可能会想有没有不用手动加的方法,但遗憾的是原生JavaScript没有提供这样的能力。因为一个对象可以被多个变量引用,比如:

const obj1 = { result: 6 };
const obj2 = obj1;

这时候obj1和obj2指向同一个对象,你说这个对象的"名称"到底是哪个?所以从设计上来说,对象不会绑定到某个变量名,必须显式添加标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:39