我想保护所有的类方法并防止它们被覆盖,例如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
答案 0 :(得分:0)
您应该冻结课程。装饰器模式是实现它的一种简单方法,但是您也可以自己调用冻结。 (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
可以应用于方法;仅属性