JavaScript构造函数创建对象时如何同时实现嵌套对象的赋值与获取
原代码核心问题
- 构造函数形参重复定义了两个
name,在JS函数的参数作用域中,重名参数会被后声明的同形参覆盖,导致最初传入的实例名称'book'会被最后一个传入的分类名称值覆盖,外层普通属性的赋值逻辑本身就存在隐性bug - 嵌套的
category对象目前是硬编码的空字符串占位,没有和构造函数的传入参数建立关联,无法接收分类相关的参数值
修正实现方案
- 对构造函数的形参做语义化命名,消除重名冲突,明确每个入参对应的属性位置
- 初始化嵌套
category对象时,直接将对应入参赋值给对象内部属性,无需提前设置空字符串占位
// 修正后构造函数:形参无语义冲突 function creation(name, value, categoryId, categoryName) { this.name = name; this.value = value; this.category = { id: categoryId, name: categoryName } } // 调用时入参顺序和原代码完全一致,无需改动调用逻辑 let creationOne = new creation('book', 350, 1, "Something extraoridnary"); console.log(creationOne);
运行后输出的实例结构
creation { name: 'book', value: 350, category: { id: 1, name: 'Something extraoridnary' } }
后续如果入参持续增多,可改为传入配置对象的形式,通过解构赋值直接映射嵌套属性,避免形参列表过长的问题。
内容的提问来源于stack exchange,提问作者High level
相关产品推荐
相关产品推荐

