javascript - Måste vi använda nyckelordet "this" i typescript?
Jag skriver ett litet exempel för att validera Name, Email, Password och ConfirmPassword via TypeScript.
Jag har försökt:
interface IValidation {
CheckingNameAndEmail(): boolean;
CheckingPasswordAndConfirmPassword(): boolean;
}
class Validation implements IValidation {
private Input: string;
private Type: string;
constructor(input: string, _type: string) {
this.Input = input;
this.Type = _type;
}
Validate = function () {
switch (this.Type) {
case 'Name':
case 'Email':
return this.CheckingNameAndEmail()
case 'Password':
case 'ConfirmPassword':
return this.CheckingPasswordAndConfirmPassword()
}
};
CheckingNameAndEmail = function () {
var reg = this.Type == 'Name'
? new RegExp('^.{4,16}$')
: new RegExp('^((([0-9]?)[a-zA-Z0-9]([0-9]?))+[\._-]??[a-zA-Z0-9]+)+@{1}?([a-zA-Z0-9]+[\._-]??[a-zA-Z0-9]+)+\.(com|net|org|vn){1}$')
return reg.test(this.Input)
};
CheckingPasswordAndConfirmPassword = function () {
var reg = new RegExp('^.{6,50}$');
return reg.test(this.Input)
};
}
Som du kan se, måste jag använda nyckelordet this i exemplet. Om jag inte gör det kommer det att ge ett fel (Som: Kan inte hitta ...).
Så min fråga är: Hur undviker man att kalla this flera gånger i TypeScript?
Svar #1
Du måste uttryckligen skriva this i Typescript. Ibland kan det vara användbart att använda en ytterligare lokal variabel för att spara skrivande och för att skriva kod som är vänlig för minifiering. Tänk på detta exempel:
foo() {
if (this.someAwesomeMember.bar) {
var f = this.someAwesomeMember.bar(123);
var b = this.someAwesomeMember.bar(321);
// do more stuff with this awesome member
}
}
Eftersom vi refererar till den fantastiska medlemmen med this hela tiden, finns det inte mycket att minimera här. Vi kan göra bättre:
foo() {
var someAwesomeMember = this.someAwesomeMember;
if (someAwesomeMember.bar) {
var f = someAwesomeMember.bar(123);
var b = someAwesomeMember.bar(321);
// do more stuff with this awesome member
}
}
Vilket kan minifieras till något som
var a=this.someAwesomeMember;if(a.bar){var f=a.bar(123);var b=a.bar(321);}
Observera att det kan minska läsbarheten att ersätta this med en annan lokal variabel. Så du måste bedöma noggrant här.
Svar #2
Du kan inte undvika det. Det är en egenskap hos språket.
<hard-learned-lesson>Jag tenderar att undvika den här typen av genvägar när jag skriver min kod eftersom det gör det svårare för andra att läsa den. Läsbarhet är en viktig sak när du strävar efter att skriva bra kod (för dig själv och för andra).</hard-learned-lesson>
