#javascript #typescript #class-method
#javascript #typescript #класс-метод
Вопрос:
Я хочу защитить все методы класса и предотвратить их перезапись, например 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
Комментарии:
1. Почти все в JavaScript перезаписывается, вы просто не должны этого делать. Чего вы пытаетесь достичь, просто получить ошибку компиляции typescript? Ошибка времени выполнения в
Object.assign
строке? Объект, на которыйObject.assign
строка не влияет, и который все еще может вызывать свой.bark()
метод впоследствии? Что-то еще?2.Не уверен, что вам действительно нужно.
Object.assign
не изменяет методы / свойства, доступные только для чтения, он переопределяет методы / свойства с одинаковыми именами. Поэтому ошибка на 100% верна, потомуObject.assign
что строка переопределяет.bark
Boolean
свойство, которое не является функцией.