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

如何创建带属性的新产品?通过addProduct函数构造带属性product对象

正确实现addProduct添加产品功能的方案

先说说你现有代码里的几个问题,咱们一步步修正:

  1. 参数传递与接收不匹配:你调用addProduct时传了3个参数("dog", 1488, 2000),但函数只定义了一个newProduct参数,后两个值根本没被接收到。
  2. 错误使用new关键字:addProduct是用来执行添加操作的普通函数,不是构造函数,用new调用会创建一个空的实例对象,完全不符合你的需求。
  3. 函数内部逻辑错误:你在函数里重新声明了var newProduct = this.product;,这里的this在new调用时指向新创建的实例,而实例上根本没有product属性,同时还覆盖了传入的参数,等于完全没用到传入的产品数据。

方案1:接收独立参数的基础实现

这种方式适合参数固定的场景,调用起来直接明了:

// 现有存储数组
var storage = [ {product: {name: "cat", count: 3443, price: 1000}} ];

// 定义addProduct函数,接收名称、数量、价格三个参数
function addProduct(name, count, price) {
  // 创建符合storage格式的产品条目
  const newProductItem = {
    product: {
      name: name,
      count: count,
      price: price
    }
  };
  // 将新条目添加到storage数组
  storage.push(newProductItem);
}

// 调用函数添加新产品
addProduct("dog", 1488, 2000);

// 验证结果(可以打印看看)
console.log(storage);
// 输出会包含两个条目:cat和dog的产品信息

方案2:接收属性对象的灵活实现

如果后续可能扩展产品属性(比如分类、产地等),推荐用这种方式,扩展性更强:

var storage = [ {product: {name: "cat", count: 3443, price: 1000}} ];

// 接收一个包含产品属性的对象作为参数
function addProduct(productProps) {
  // 解构参数,提取需要的属性(可以加默认值避免参数缺失报错)
  const { name, count, price } = productProps;
  // 创建产品条目
  const newProductItem = {
    product: {
      name,
      count,
      price
      // 后续加新属性直接在这里扩展即可
    }
  };
  storage.push(newProductItem);
}

// 调用方式:传入属性对象
addProduct({ name: "dog", count: 1488, price: 2000 });
// 后续扩展属性示例
addProduct({ name: "fish", count: 5000, price: 500, category: "pet" });

额外优化建议

  • 可以给参数加默认值,避免调用时漏传参数导致属性为undefined,比如:
    function addProduct(name = "unknown", count = 0, price = 0) {
      // ...逻辑不变
    }
    
  • 如果用ES6+语法,建议把var换成const/let,避免变量提升带来的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:30:24