类的属性的装饰器

2022-04-17  本文已影响0人  泡杯感冒灵
类的属性的装饰器,是只有两个参数的。
function nameDecorator(target: any, key: string) {
  console.log(target, key);
};


class Test{
  @nameDecorator
  name = 'yang';
}

const test = new Test();
console.log(test.name);
// 注意 nameDecorator 返回值要么是 void 要么是 any
function nameDecorator(target: any, key: string):any {
  const descriptor: PropertyDescriptor = {
    writable: false
  };
  return descriptor;
};

class Test{
  @nameDecorator
  name = 'yang';
}

const test = new Test();
test.name = 'weiyang';
console.log(test.name);
通过属性装饰器,直接对属性值进行修改。
function nameDecorator(target: any, key: string):any {
  target[key] = 'lee'
};


class Test{
  @nameDecorator
  // 我们这里定义的属性,实际上是定义在类声明的实例上的
  name = 'yang';
}

const test = new Test();
// 访问test.name 是先从实例内容去找,如果找不到,才会去原型内去找。
console.log(test.name); // yang
console.log((test as any).__proto__.name); //lee
也就是说,使用属性装饰器,想要直接对属性的值做改变,是不行的。
上一篇下一篇

猜你喜欢

热点阅读