自动递增对象id JS构造函数(静态方法和变量)
Posted
技术标签:
【中文标题】自动递增对象id JS构造函数(静态方法和变量)【英文标题】:Incrementing object id automatically JS constructor (static method and variable) 【发布时间】:2016-02-06 20:27:00 【问题描述】:我是 javascript 的新手,我有一个想法,要创建类(函数),我知道它在 JS 中是如何工作的(原型等),但我需要做一些事情,比如在数据库中增加 Id。
我的想法是创建静态方法,我认为闭包在这里非常适合,每当创建新对象时,它应该返回递增的 id。
我不知道实现这一点的正确方法是什么,或者这可能是一种不好的做法。
请提供简单的例子。
【问题讨论】:
【参考方案1】:关闭是个好主意:
var MyClass = (function()
var nextId = 1;
return function MyClass(name)
this.name = name;
this.id = nextId++;
)();
var obj1 = new MyClass('joe'); //name: "joe", id: 1
var obj2 = new MyClass('doe'); //name: "doe", id: 2
或者,如果您想要一些更灵活的解决方案,您可以创建简单的工厂:
function MyObjectFactory(initialId)
this.nextId = initialId || 1;
MyObjectFactory.prototype.createObject = function(name)
return name: name, id: this.nextId++
var myFactory = new MyObjectFactory(9);
var obj1 = myFactory.createObject('joe'); //name: 'joe', id: 9
var obj2 = myFactory.createObject('doe'); //name: 'doe', id: 10
```
【讨论】:
感谢您的回答!!!你能解释一下第一个例子吗,如果我需要把一些逻辑检查构造函数的参数计数,例如像这样var Product = function Product() this.name = ""; this.amount = ""; this.price = ""; this.picture = ""; if (arguments.length == 4) this.name = arguments[0]; this.amount = arguments[1]; this.price = arguments[2]; this.picture = arguments[3]; ;
我应该把这个逻辑放在返回函数的哪里?【参考方案2】:
由于节点是单线程的,这应该很容易并且相对安全。
我认为你可以通过创建一个全局变量来实现这一点
global.counter = 0
然后在构造时,您的类可以递增它,或者如果您需要在创建类时保持对值的引用,则递增并获取该值。
function YourClass()
global.counter++;
var yc = new YourClass(); // global.counter 1
var yc2 = new YourClass(); // global.counter 2
【讨论】:
有什么方法可以为对象(原型)静态执行此函数,例如当调用构造函数时执行此方法以获取对象的唯一 ID?以闭包为例 @Michael Prokopowicz 的答案明显更简洁 使用this post编写的静态函数示例 全局值会持续吗?以上是关于自动递增对象id JS构造函数(静态方法和变量)的主要内容,如果未能解决你的问题,请参考以下文章