Typescript 省略使用“;这一点;总是

Typescript 省略使用“;这一点;总是,typescript,syntactic-sugar,Typescript,Syntactic Sugar,我有一些代码,比如 get ab(){ if(this.a == this.b) this.c = this.a.add(this.b); if(this.d == this.b) this.d = this.a.add(this.b, this.bIdx).normalize(); return this._ab || (this._ab = new Edge(this.allPoints, this.a

我有一些代码,比如

    get ab(){ 
        if(this.a == this.b) this.c = this.a.add(this.b);
        if(this.d == this.b) this.d = this.a.add(this.b, this.bIdx).normalize();
        return this._ab || 
               (this._ab = new Edge(this.allPoints, this.aIdx, this.bIdx)); 
    }

真烦人!也会影响可读性。这段代码可能要短得多。。。如何在C++或HAXE风格中使用TS,在这里我们不必提及“这个”。对于编译器来说,猜测“如果存在变量名-检查是否存在此名称的成员”不是很容易吗

注意:我的问题与此无关:-在这里,开发人员询问是否可以不使用传递给构造函数的瞬态对象属性。在我的问题中,我问在访问属性时是否可以省略“this”关键字

TypeScript(和JavaScript)没有隐含的
this

对于仅要读取(而不是写入)的值,可以将其分解为局部变量或常量:

get ab(){ 
    const {a, b, d, aIdx, bIdx, _ab} = this;
    if(a == b) this.c = a.add(b);
    if(d == b) this.d = a.add(b, bIdx).normalize();
    return _ab || 
           (_ab = new Edge(allPoints, aIdx, bIdx)); 
}
但您可能更喜欢Crockford风格的闭包编程。与带有
a
b
等的对象不同,函数中包含局部变量,该函数返回带有方法的对象:

function createExample() {
    let a, b, c, d, aIdx, bIdx, _ab;

    // ...

    return {
        ab() {
            if(a == b) c = a.add(b);
            if(d == b) d = a.add(b, bIdx).normalize();
            return _ab || 
                   (_ab = new Edge(allPoints, aIdx, bIdx)); 
        }
    };
}
然后,由于返回函数的方法与创建它的调用中的局部数接近,因此直接使用
a
b


不过,最好尽量减少这两种风格的混合。请注意,这种风格目前在JavaScript和TypeScript领域不如使用带有属性的对象那样流行,这可能是让其他人处理代码时的一个因素。(尽管这只是一个培训问题。)

这是否回答了您的问题?对我来说,看起来你应该实施战略模式不,这是另一个问题。在那里,一个人询问是否可以不使用传递给构造函数的瞬态对象属性。在我的问题中,我问在访问局部变量时是否可以省略“this”关键字。@shal-您指的是属性。(当访问局部变量时,你总是省略
这个
。)哦,对了,对不起,我的坏:)或多或少,它会做:)但是它会复制,所以我不能做“property=value”,我必须“this.property=value”,对吗?@shal-对,这就是为什么我上面有
this.c=
this.d=
,以及使用
const
的部分原因(因此,如果您忘记了,您会得到一个明显的错误,而不仅仅是……没有看到更改发生)。