装饰器在编译es6后target、target.prototype是{}
来源:7-1 创建控制器和装饰器
 
			莜紫兮
2021-11-05
import "reflect-metadata";
function tControll(target: any) {
  for (let key in target.prototype) {
    console.log(Reflect.getMetadata("path", target.prototype, key));
  }
}
function get(path: string) {
  return function (target: any, key: string) {
    Reflect.defineMetadata("path", path, target, key);
  };
}
@tControll
class controller {
  @get("/")
  getName() {
    console.log("lisi");
  }
}
老师为什么这段代码在编译成es6后 tControll 没有输出呢?


写回答
	2回答
- 
				  qq_慕运维0573241 2022-04-13 // 这样的写法在编译成es2016的情况下无效 // 因为class的内部所有定义的方法,都是不可枚举的,与 ES5 的行为不一致 for (let key in target.prototype) { const data = Reflect.getMetadata('data', target.prototype, key) console.log(data) } // 编译成es2016的情况 可以这样写 Object.getOwnPropertyNames(target.prototype).forEach((item: string) => { // 排除默认的constructor属性 if (item !== 'constructor') { const data = Reflect.getMetadata('data', target.prototype, item) console.log(data) } })342025-01-08
- 
				  Dell 2021-11-05 会影响代码执行吗 022021-11-05
相似问题
 
						