我们必须使用"这个"打字稿中的关键字?

时间:2016-01-20 08:23:57

标签: javascript typescript

我正在编写一个小例子来通过打字稿验证NameEmailPasswordConfirmPassword

我试过了:

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

如您所见,我must在示例中使用了this个关键字。如果没有,它会给我一个错误(比如:Cannot find ...)。

所以我的问题是:如何避免在打字稿中多次调用this

2 个答案:

答案 0 :(得分:5)

你无法避免它。这是该语言的属性。

<hard-learned-lesson>当我编写代码时,我倾向于避免使用这种快捷方式,因为这会让其他人更难阅读它。当你想要编写好的代码(为自己和他人)时,可读性是关键。</hard-learned-lesson>

答案 1 :(得分:3)

您必须在Typesript中明确写出this。有时使用额外的局部变量来节省输入和编写简化友好代码可能是有用的。考虑这个例子:

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

由于我们一直使用this来引用令人敬畏的成员,因此这里没有太多可以缩小的内容。我们可以做得更好:

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

可以将其缩小为类似

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

请注意,它可能会降低用另一个局部变量替换this的可读性。所以你必须在这里仔细判断。