Установить уникальный идентификатор при создании объекта (с помощью конструктора) - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть проблема, которую мне нужно решить относительно моего кода Javascript.Когда создается экземпляр объекта (в данном случае добавляются новые члены), я хочу, чтобы члены получали уникальные идентификаторы.Ниже приведена упрощенная версия моего кода, чтобы дать вам картину того, что я хочу.Каков наилучший способ сделать это?

function Member(name){

    //unique id code...

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

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

Ответы [ 3 ]

2 голосов
/ 28 ноября 2011

Полагаю, это просто:

(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.

0 голосов
/ 04 августа 2017

Используйте немедленно вызванное выражение функции (IIFE), которое создает область действия для функции.В этой области вы определяете переменную счетчика.Эта область сохраняется во время выполнения до тех пор, пока существует uniqueId.Только возвращенная функция имеет доступ к области видимости.Каждый раз, когда вы вызываете вашу функцию uniqueId, она добавляет +1 к счетчику в области видимости и возвращает значение.

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

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

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

Подсказка: lodash также имеет функцию uniqueId.

0 голосов
/ 28 ноября 2011

Если вы просто хотите (вероятно) уникальный идентификатор, вы можете использовать

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

, который возвращает миллисекунды с эпохи (1 января 1970 г.).

РЕДАКТИРОВАТЬ: Я думаю, я никогда не сталкивался с такими экстремальными ситуациями, описанными в комментариях ниже в приложении javascript, но в этих случаях это, безусловно, плохое решение.

...