如何解决如何防止方法被覆盖并分配其他类型?
我想保护所有的类方法并防止它们被覆盖,例如Object.assign(dog,{ bark: true});
。有人说,因此,您不应在Typescript中使用类方法,因为与简单的函数和方法不同,类方法是可重写的。
class Animal {
eingezahltkaptial: number[]=[1,2,3];
move(distanceInMeters: number = 0) {
console.log(`Animal moved ${distanceInMeters}m.`);
}
hello(): void {
console.log(`Animal moved m.`);
}
}
class Dog extends Animal {
bark(): void {
console.log("Woof! Woof!");
}
}
const dog = new Dog();
Object.assign(dog,{ bark: true});
dog.bark();
[ERR]: "Executed JavaScript Failed:"
[ERR]: dog.bark is not a function
解决方法
您应该冻结课程。装饰器模式是实现它的一种简单方法,但是您也可以自己调用冻结。 (Object.assign不是typesafe的打字工具,不是很好的工具)
function frozen(target: Function): void {
Object.freeze(target);
Object.freeze(target.prototype);
}
@frozen
class Dog extends Animal {
bark(): void {
console.log("Woof! Woof!");
}
}
const dog = new Dog();
Object.assign(dog,{ bark: true }); // TypeError: Cannot assign to read only property 'bark' of object '#<Dog>'
dog.bark();
关于人们对readonly
的评论:
-
readonly
可以应用于方法;仅属性 - readonly是仅TS的功能,如果软件处于可以动态发生突变的状态,那么它将提供零保护
- 适用于只读且使用.freeze的地方,TS会自动将readonly修饰符添加到属性中,而无需手动将其添加到其中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。