javascript - 自动递增对象id JS构造函数(静态方法和变量)

标签 javascript node.js oop closures ecmascript-5

我是 JavaScript 的新手,我有一个想法,创建类(函数),我知道它在 JS(原型(prototype)等)中是如何工作的,但我需要做一些事情,比如在数据库中递增 Id。

我的想法是创建静态方法,我认为闭包在这里非常适合,无论何时创建新对象,它都应该返回递增的 id。

我不知道实现这个的正确方法是什么,或者这可能是不好的做法。

请提供简单的例子。

最佳答案

闭包是个好主意:

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 - 自动递增对象id JS构造函数(静态方法和变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554120/

相关文章:

java - 将私有(private)方法设为静态以增加函数式编程的习惯

javascript - 如何在 Javascript 中解析以下 AJAX 响应?

javascript - pageshow 上的 Jquery 移动 ListView css

javascript - 页面刷新时,需要获取输入的值

javascript - Jquery 不会在第一次点击时隐藏元素

对象本身作为参数的对象上的 C++ 调用方法

node.js - 有没有办法从 node.js 同步调用 AWS Lambda?

javascript - 为什么 Protractor 会立即运行每一行代码?

node.js - 如何将 process.env.NODE_ENV 从 Gulp 传递到 Webpack?

c++ - 如何使用包含内部类的类的实例有效地访问内部类的成员?