元数据
function params(value) {
return function (target: any, propertyKey: string, parameterIndex: number) {
Reflect.defineMetadata(parameterIndex, value, target, propertyKey);
};
}
function Method(key, value) {
return function (target: any, propertyKey: string) {
console.log(target === A.prototype);
Reflect.defineMetadata(key, value, target, propertyKey);
};
}
function Obj(key, value) {
return function (target: any) {
console.log(target === A);
Reflect.defineMetadata(key, value, target);
};
}
@Obj('obj', 'obj')
class A {
@Method('method', 'method')
speak(@params('params') a: number, @params('params1') b: number) {
console.log(a);
}
}
console.log(Reflect.getMetadata(0, A.prototype, 'speak'));
console.log(Reflect.getMetadata(1, A.prototype, 'speak'));
console.log(Reflect.getMetadata('obj', new A().constructor));
console.log(Reflect.getMetadata('method', new A(), 'speak'));
===========以下===========
function params(value) {
return function (target: any, propertyKey: string, parameterIndex: number) {
console.log(target.constructor);
Reflect.defineMetadata(
parameterIndex,
value,
target.constructor,
propertyKey,
);
};
}
function Method(key, value) {
return function (target: any, propertyKey: string) {
Reflect.defineMetadata(key, value, target.constructor, propertyKey);
};
}
function Obj(key, value) {
return function (target: any) {
console.log(target === A);
Reflect.defineMetadata(key, value, target);
};
}
@Obj('obj', 'obj')
class A {
@Method('method', 'method')
speak(@params('params') a: number, @params('params1') b: number) {
console.log(a);
}
}
console.log(Reflect.getMetadata(0, A, 'speak'));
console.log(Reflect.getMetadata(1, A, 'speak'));
console.log(Reflect.getMetadata('obj', A));
console.log(Reflect.getMetadata('method', A, 'speak'));