Node.js中构造函数实现实例自增ID时counter值始终为1如何解决?
自动ID生成逻辑异常排查与修复方案
问题根因
你的代码始终返回1的核心原因是Product.counter作为类静态属性没有被持久化存储,每次调用getCounter方法时,Product.counter都会被识别为未定义,因此每次计算逻辑都是(undefined || 0) + 1,最终返回值永远固定为1。
正确实现方式
1. ES6 Class 实现(推荐)
通过类静态属性存储计数器,计数器会挂载在类本身不会随实例化重置:
class Product { // 声明类静态计数器,全局唯一 static counter = 0 constructor() { this.id = Product.getCounter() } static getCounter() { Product.counter += 1 return Product.counter } } // 测试逻辑 const p1 = new Product() // id: 1 const p2 = new Product() // id: 2 const p3 = new Product() // id: 3
2. ES5 构造函数实现
function Product() { this.id = Product.getCounter() } // 给构造函数挂载静态属性和方法 Product.counter = 0 Product.getCounter = function() { Product.counter += 1 return Product.counter } // 测试逻辑 var p1 = new Product() // id: 1 var p2 = new Product() // id: 2
注意事项
- 计数器必须挂载在类/构造函数本身,不能定义在实例或者原型链上,否则每次实例化都会重置计数器
- 计数方法建议定义为静态方法,避免实例上下文干扰全局计数逻辑
内容的提问来源于stack exchange,提问作者Itay Dali
相关产品推荐
相关产品推荐

