增加对象ID

时间:2017-03-10 22:26:59

标签: javascript oop object closures prototype-programming

var nextid = 0
function Animal(name) {
    this.name = name
    Object.defineProperty(this, 'nextid',
    {value: nextid++, writable: false})
}
var animal1 = new Animal('dog')
var animal2 = new Animal('cat')

我想知道与使用闭包或工厂模式相比,这是否是一个好方法?

我的问题类似于这个线程(建议的闭包和工厂模式):

Incrementing object id automatically JS constructor (static method and variable)

2 个答案:

答案 0 :(得分:1)

链接答案中的闭包和工厂模式仅用于将nextid变量封装在本地范围或工厂实例中。如何创建动物 - 作为普通对象,作为类实例,或具有只读属性的实例 - 与此无关。他们每个人都同样好。

您是否真的需要封装取决于您的模块化方法(例如,闭包在节点模块中毫无意义)以及对ID的唯一性要求。

答案 1 :(得分:1)

Ids 不应该作为构建对象的一部分生成:它们应该分配到对象。

想想运动竞赛:跑步者选择他们的背部吗?

function Animal() {

}

var idGenerator = new IdGenerator();
var animal = new Animal();
animal.id = idGenerator.generate();

可能你仍然可以在构造函数中生成 ids ,但我会尝试避免硬编码 id generation 注入idGenerator

function Animal(idGenerator) {
    this.id = idGenerator.generate();
}
顺便说一下,我的两分钱是你应该采用的第一种方法:跑步者不会自己分配背部。