私はコンストラクタを置き換えたいときに、クラスのデコレータがTypescriptでどのように動作するかを理解しようとしています。我々はそれを行うのはなぜTypescriptのクラスデコレータ
newConstructor.prototype = originalConstructor.prototype;
:
const log = <T>(originalConstructor: new(...args: any[]) => T) => {
function newConstructor(... args) {
console.log("Arguments: ", args.join(", "));
new originalConstructor(args);
}
newConstructor.prototype = originalConstructor.prototype;
return newConstructor;
}
@log
class Pet {
constructor(name: string, age: number) {}
}
new Pet("Azor", 12);
//Arguments: Azor, 12
すべてが理解されているが、このライン:私はこのデモを見てきましたか?
あなたのコードがあなたが思うものを実際にしていないという事実から始めましょう。それは動作しません。 ctorを 'コンストラクタ(public name:string、public age:number)'に変更し、インスタンスメンバ( 'name'と' age')にアクセスしようとすると 'undefined'が返されます。適切な方法でこの質問をチェックしてください:https://stackoverflow.com/questions/39198811/can-we-change-the-constructor-behavior-using-typescript-class-decorators-i-mean –
こんにちは、 このコードはインターネットからのものですが、動作するかどうかは気にしません。もっと多くの例で見たので、なぜこの行が必要なのかを知る必要があります。 – RiskX