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

工厂函数参数作为可编辑私有变量:修改参数是否为不良实践?

工厂函数中修改参数作为私有变量的实践分析

一、你的第一种实现是可行的,且不属于不良实践

你提供的代码(修正语法错误后)完全可行,利用闭包特性实现了私有状态的封装:

  • 工厂函数的参数name和age处于函数作用域内,外部无法直接访问
  • 返回的editAge、editName作为闭包,能够持续访问并修改这两个参数,实现了「只能通过指定方法修改内部状态」的封装需求

修正语法错误后的代码:

factory (name, age) {
  const editAge = (newAge) => {
    age = newAge;
  }
  const editName = (newName) => {
    name = newName;
  }
  return { editAge, editName }
}

二、两种返回方式的核心区别

1. 仅返回修改方法(第一种)

  • 严格实现了私有状态:外部完全无法直接读取或篡改name、age,只能通过你提供的方法操作,适合需要严格封装、避免外部随意干预内部状态的场景。

2. 返回状态+修改方法(第二种)

  • 状态完全公开:外部可以直接读取obj.name、obj.age,甚至直接赋值修改(比如obj.name = "张三"),这就失去了「私有变量」的意义,变成了公开属性。适合不需要封装、允许外部直接访问状态的简单场景。

三、优化建议(可选)

如果想让代码可读性更强,明确区分私有状态和函数参数,可以把参数赋值给内部变量,用下划线前缀约定私有标识:

factory (name, age) {
  let _name = name;
  let _age = age;
  const editAge = (newAge) => {
    _age = newAge;
  }
  const editName = (newName) => {
    _name = newName;
  }
  return { editAge, editName }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:43:19