javascript 속성 변경 - JavaScript 개체 ID




3 Answers

아니요, 객체에는 식별자가 내장되어 있지 않지만 객체 프로토 타입을 수정하여 객체를 추가 할 수 있습니다. 다음과 같은 방법을 예로들 수 있습니다.

(function() {
    var id = 0;

    function generateId() { return id++; };

    Object.prototype.id = function() {
        var newId = generateId();

        this.id = function() { return newId; };

        return newId;
    };
})();

즉, 일반적으로 객체 프로토 타입을 수정하는 것은 매우 나쁜 관행으로 간주됩니다. 나는 대신 당신이 필요에 따라 객체에 id를 수동으로 할당하거나 다른 사람들이 제안한 것처럼 touch 기능을 사용하도록 권장 할 것이다.

사용법 class

자바 스크립트 객체 / 변수에는 일종의 고유 한 식별자가 있습니까? Ruby처럼 object_id 있습니다. 나는 DOM id 속성을 의미하는 것이 아니라 어떤 종류의 메모리 주소를 의미한다.




사실, object 프로토 타입을 수정할 필요가 없습니다. 다음은 모든 객체에 대해 고유 ID를 효율적으로 '획득'하는 데 효과적입니다.

var __next_objid=1;
function objectId(obj) {
    if (obj==null) return null;
    if (obj.__obj_id==null) obj.__obj_id=__next_objid++;
    return obj.__obj_id;
}



ES6 + 기호 사용.

고유 기호가 선호되는 경우 Symbol 용 ES6 모듈 내보내기를 사용하고, 그렇지 않으면 전역 레지스트리에 기호를 사용하십시오.

(function () {
    let id = 0;
    const generateId = () => ++id;

    // export const identifier = Symbol('identifier'); //unique symbol
    const identifier = Symbol.for('identifier'); //symbol in global registry

    Object.prototype[identifier] = function () {
        const id = generateId();
        this.id = this.id || id;
        return this.id;
    };

})();



Related