node --inspect-brk --enable-source-maps ./src/index.js
실행 후 크롬
chrome://inspect
주소에서 진행.
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
function Animal(name) {
Reflect.defineMetadata("key1", "value1", Animal, "baz2");
Reflect.defineMetadata("key1", "value2", Animal, "baz1");
this.name = name;
}
const a = new Animal("고양이");
const b = new Animal("강아지");
const c = new Animal("참새");
a.age = 1;
console.log(Reflect.getMetadata("key1", Animal, "baz2"));
console.log(Reflect.getOwnMetadata("key1", Animal, "baz2"));
DevTools 페이지가 열리면 Sources
페이지에서 a.age
줄에 Breakpoints를 걸어준다.
그 후 Memory 페이지에서 프로파일링을 하고 Object 이름을 검색.
function customDecorator(target: any, key: string) {
let value = 10;
Object.defineProperty(target, key, {
get() {
return value;
},
set(n: any) {
value = n + 10;
},
});
}
class DataDefaultType {
@customDecorator
num: number = 0;
}
const test = new DataDefaultType();
console.log(`get : ${test.num}`); // 10
test.num = 30;
console.log(`get after set : ${test.num}`); // 40
npm reflect-metadata
히든 클래스 https://engineering.linecorp.com/ko/blog/v8-hidden-class
V8 Map과 Transition https://zbvs.tistory.com/15