本篇文章将介绍类里面属性的装饰器。
类属性读写控制
装饰器可以对类中属性读写操作进行控制。
function nameDecorator(target: any, ket: string):any {
const decriptor: PropertyDescriptor = {
// 设置属性只读
writable:false
}
return decriptor
}
class Test5{
@nameDecorator
name = 'jake'
}
const test = new Test5()
test.name = 'smith'
console.log(test.name)
在执行到对一个修饰为只读的属性进行修改时会报错,意思是不能修改只读属性。
修改装饰器类属性
装饰器可以对一个装饰类的属性值进行变更。
function nameDecorator(target: any, key: string):any {
target[key] = 'hake'
}
class Test5{
@nameDecorator
name = 'jake'
}
const test = new Test5()
console.log((test as any).__proto__.name)
console.log(test.name)
结论
使用属性装饰器无法修改类的属性,原因是修改的实际上是原型的属性的值。
类声明的属性是存储在类声明的实例上的,所以修改原型属性值,并不会对实例上的属性有任何变更。