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

使用Object.defineProperty为构造函数实例添加属性时返回undefined的问题排查

问题分析与解决:Object.defineProperty 添加属性返回 undefined

嘿,这个坑我之前也踩过!你出错的核心原因是用错了 Object.defineProperty 的配置项——你在配置对象里写了name: 'Sweet Flower',但这个方法根本不认name这个键,它是用value来指定属性的实际值的。

为什么会返回 undefined?

当调用Object.defineProperty时,如果没有指定value、get/set这些核心配置,属性会默认被设置为undefined。你写的name属于自定义的无效配置,JavaScript 会直接忽略它,所以Sucrose.favFlower自然就是undefined了。

修正后的代码

把配置里的name改成value就可以解决问题:

// 原构造函数和实例
function genshinImpactCharacter(weapon, vision, rarity) { 
  this.weapon = weapon; 
  this.vision = vision; 
  this.rarity = rarity; 
}
const Sucrose = new genshinImpactCharacter('Catalyst', 'Anemo', 4);

// 修正后的 Object.defineProperty 调用
Object.defineProperty(Sucrose, "favFlower", { 
  value: 'Sweet Flower', 
  // 可选:如果需要这个属性能被枚举(比如 console.log 显示)、修改,加上下面的配置
  enumerable: true, 
  writable: true 
});

console.log(Sucrose.favFlower); // 现在会输出 'Sweet Flower'
console.log(Sucrose); // 也能看到 favFlower 属性和对应值了

补充说明

默认情况下,用Object.defineProperty添加的属性是:

  • enumerable: false:不会出现在对象的枚举属性中(比如for...in循环或者console.log默认不显示)
  • writable: false:属性值不能被修改
  • configurable: false:不能删除该属性或修改其配置

所以如果需要这些特性,记得手动在配置对象里声明对应的键值哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:07:34