自动递增对象id JS构造函数(静态方法和变量)
Incrementing object id automatically JS constructor (static method and variable)
我是 JavaScript 的新手,我有一个想法,要创建 class(函数),我知道它在 JS(原型等)中的工作原理,但我需要做类似于在数据库中递增 Id。
我的想法是创建静态方法,我认为闭包在这里非常适合,无论何时创建新对象,它都应该 return 增加 id。
我不知道实现这个的正确方法是什么,或者这可能是不好的做法。
请提供简单的例子。
由于节点是单线程的,因此这样做应该很容易且相对安全。
我想你可以通过创建一个全局变量来完成这个
global.counter = 0
然后在构造时,您的 class 可以递增它,或者如果您需要在创建 class 时保持对值的引用,则递增并获取该值。
function YourClass() {
global.counter++;
}
var yc = new YourClass(); // global.counter 1
var yc2 = new YourClass(); // global.counter 2
闭包是个好主意:
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}
```
我是 JavaScript 的新手,我有一个想法,要创建 class(函数),我知道它在 JS(原型等)中的工作原理,但我需要做类似于在数据库中递增 Id。
我的想法是创建静态方法,我认为闭包在这里非常适合,无论何时创建新对象,它都应该 return 增加 id。
我不知道实现这个的正确方法是什么,或者这可能是不好的做法。
请提供简单的例子。
由于节点是单线程的,因此这样做应该很容易且相对安全。
我想你可以通过创建一个全局变量来完成这个
global.counter = 0
然后在构造时,您的 class 可以递增它,或者如果您需要在创建 class 时保持对值的引用,则递增并获取该值。
function YourClass() {
global.counter++;
}
var yc = new YourClass(); // global.counter 1
var yc2 = new YourClass(); // global.counter 2
闭包是个好主意:
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}
```