1

我有一个关于我的 Javascript 代码需要解决的问题。当实例化对象(在这种情况下添加新成员)时,我希望成员获得唯一的 id。下面是我的代码的简化版本,为您提供我想要的图片。做这个的最好方式是什么?

function Member(name){

    //unique id code...

    this.getName = function(){
        return name;
    }

    this.setName = function(_name){
        name = _name;
    }
}
4

3 回答 3

3

我想这很容易:

(function() {
    var idcounter = 0;

   function Member(name){
        this.id = idcounter++;
        this.getName = function(){
            return lastName;
        };

        this.setName = function(_name){
            name = _name;
        };
   }

   yournamespace.Member = Member;
}()); 

yournamespace应该是您的应用程序对象或其他任何东西。window您也可以在浏览器中将其替换为Member全局构造函数。

于 2011-11-27T21:00:03.523 回答
1

如果您只想要一个(可能)唯一的 id,您可以使用

var id = new Date().getTime();

它返回自纪元(1970 年 1 月 1 日)以来的毫秒数。

编辑:我想我从未在 javascript 应用程序中遇到过以下评论中描述的极端情况,但在这些情况下,这肯定是一个糟糕的解决方案。

于 2011-11-27T20:59:57.897 回答
0

使用为函数创建范围的立即调用函数表达式 (IIFE)。在此范围内,您定义了一个计数器变量。只要 uniqueId 存在,此范围就会在整个运行时保留。只有返回的函数才能访问范围。每次调用 uniqueId 函数时,它都会向范围内的计数器添加 +1 并返回值。

var uniqueId = (() => {
        var counter = 0

        return function() {
            return counter++
        }
    })()

console.log(uniqueId())
console.log(uniqueId())
console.log(uniqueId())

提示:lodash 也有一个 uniqueId 函数。

于 2017-08-04T17:37:31.203 回答