심볼 메소드
Symbol.for()
전역심볼
-
전역변수처럼 이름이 같으면 같은 객체를 가르켜야할 때 사용
하나의 심볼만 보장받을 수 있다.
없으면 만들고, 있으면 가져오기 때문이다.
Symbol 함수는 매번 다른 Symbol 값을 생성하지만, Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유한다.
const dk1 = Symbol.for('dk');
const dk2 = Symbol.for('dk');
console.log( dk1 === dk2 ); // true
Symbol.keyFor()
전역심볼의 이름을 얻는 방법
Symbol.keyFor(dk1);
console.log(Symbol.keyFor(dk1)); // dk
description
전역심볼이 아닌 심볼의 이름을 얻는 방법
const id = Symbol('idd')
const user = {
name : "adidas",
age : 30,
[id] : "adidas id",
}
console.log(id.description); // idd
Object.getOwnPropertySymbols
숨겨진 Symbol key 보는 법
const id = Symbol('idd')
const user = {
name : "adidas",
age : 30,
[id] : "adidas id",
}
console.log(Object.getOwnPropertySymbols(user)); // Symbol(idd)
Reflect.ownKeys()
숨겨진 Symbol을 포함해서 객체의 모든 key 보는 법
const id = Symbol('id')
const user = {
name : "Mike",
age : 20,
[id] : "idid",
}
console.log(Reflect.ownKeys(user)); // ["name", "age", Symbol(id)]
별로 사용 안함
Symbol 예문
다른 개발자가 만들어 놓은 객체
const sb = {
name : 'soobin',
age : 29,
};
사용자가 접속하면 보는 메세지
for (let key in sb){
console.log(`Her ${key} is ${sb[key]}`);
}
일 때, 내가 작업하기 위해서
sb.showName = function(){};
와 같이 추가한다면 사용자가 보는 메세지에서
-
Her name is soobin
Her age is 29
Her showName is function(){}
와 같이 나타난다.
따라서
const showName = Symbol("show name");
sb[showName] = function() {
console.log(this.name);
}
sb[showName]();
처럼 Symbol을 사용하면 자신이 작성한 메소드도 작동하면서 다른 개발자가 만들어 놓은 코드에도 영향을 미치지 않는다.
댓글남기기