使用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
相关产品推荐
相关产品推荐

