javascript - Musíme v TypeScripte používať kľúčové slovo „this“?


Píšem malý príklad na overenie Name, Email, Password a ConfirmPassword cez TypeScript.

Skúšal som:

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)
    };
}

Ako vidíte, musím použiť kľúčové slovo this v príklade. Ak nie, vyskočí mi chyba (napr.: Cannot find ...).

Takže moja otázka je: Ako sa vyhnúť volaniu this viackrát v TypeScripte?

Odpoveď č. 1

Musíte explicitne napísať this v Typescripte. Niekedy môže byť užitočné použiť ďalšiu lokálnu premennú na úsporu písania a na písanie kódu priateľského k minifikácii. Pozrite sa na tento príklad:

foo() {
    if (this.someAwesomeMember.bar) {
        var f = this.someAwesomeMember.bar(123);
        var b = this.someAwesomeMember.bar(321);
        // do more stuff with this awesome member
    }
}

Keďže odkazujeme na úžasný člen pomocou this stále, nie je tu veľa čo zmenšovať. Môžeme to urobiť lepšie:

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
    }
}

Čo sa dá zminimalizovať na niečo ako

var a=this.someAwesomeMember;if(a.bar){var f=a.bar(123);var b=a.bar(321);}

Všimnite si, že môže znížiť čitateľnosť, ak nahradíte this inou lokálnou premennou. Preto tu musíte starostlivo posúdiť.

Odpoveď č. 2

Nemôžete sa tomu vyhnúť. Je to vlastnosť jazyka.

<hard-learned-lesson>Majú tendenciu sa vyhýbať týmto druhom skratiek, keď píšem svoj kód, pretože to sťažuje jeho čítanie ostatným. Čitateľnosť je kľúčová vec, keď sa snažíte písať dobrý kód (pre seba aj pre ostatných).</hard-learned-lesson>

Súvisiace články