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

JavaScript OOP中动态设置对象键名及方法内访问的问题

解决Inventory构造函数动态键名问题

直接在构造函数中使用方括号语法结合this,就能实现根据参数动态设置键名,同时保证后续可以正常访问该键的内部属性。

正确实现代码

function Inventory(item, price, quantity) {
  // 方括号语法会把item变量的值作为键名绑定到实例
  this[item] = {
    price: price,
    quantity: quantity
  };
}

使用示例

// 创建苹果库存实例,键名为"apple"
const appleStock = new Inventory('apple', 1.99, 50);
console.log(appleStock.apple.price); // 输出 1.99
console.log(appleStock.apple.quantity); // 输出 50

// 创建香蕉库存实例,键名为"banana"
const bananaStock = new Inventory('banana', 0.99, 100);
console.log(bananaStock.banana.price); // 输出 0.99

为什么之前的方法不行?

  • 用this.item时,JavaScript会将item识别为字符串字面量,而非变量,因此键名固定为"item",不会随参数变化。
  • 你之前尝试的newObj[item]确实能动态设置键名,但newObj是构造函数内部的局部对象,没有挂载到实例(this)上,所以外部无法访问它的属性。只要把动态键直接绑定到this,就能解决访问问题。

动态访问键名的场景

如果后续不知道具体键名,可通过变量或遍历的方式访问:

const orangeStock = new Inventory('orange', 2.49, 30);
const itemKey = 'orange';

// 通过变量访问
console.log(orangeStock[itemKey].quantity); // 输出 30

// 遍历实例的所有动态键
for (const key in orangeStock) {
  console.log(`商品:${key},单价:${orangeStock[key].price},库存:${orangeStock[key].quantity}`);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:24:26