'this.' 对于构造函数中的导入成员是否过多?
Is 'this.' excessive for imported members within constructor?
在 Angular2+ 示例中,我经常看到在构造函数中作为参数传递的导入模块由 'this.' 符号引用。这对我来说确实有意义,因为他们是 class 的成员,因此应该可以通过 class 的 'self' 访问。所以一般来说代码看起来像这样:
import { Component } from '@angular/core';
import { SomeModule } from '@somewhere';
@Component({ ... })
export class SomeComponent {
constructor( private _importedModule: SomeModule ) {
this._importedModule.doesSmethingSpecial();
}
}
但是,在 TypeScript 示例中,我经常看到 'self' 引用被省略。我的意思是这样的:
new_member_from_outside = is_something_external;
class SomeClass extends Something {
some_variable: some_type;
constructor( new_member_from_outside ) {
this.some_variable = new_member_from_outside.doingSomethingSpecial();
}
}
因此我开始在我的 Angular2+ 代码中使用它,如下所示:
import { Component } from '@angular/core';
import { SomeModule } from '@somewhere';
@Component({ ... })
export class SomeComponent {
constructor( private _importedModule: SomeModule ) {
_importedModule.doesSomethingSpecial();
}
}
代码有效,没有错误,我的 IDE 中没有 linter blood,但我的代码的审阅者重写它以使用 'this.' 并评论说我没有正确使用范围。我想知道。我的方法有问题吗?态度不好吗?如果是,我的方法到底是如何混淆范围的?我问了我的审稿人,答案是 -> 研究范围(有帮助 :D)。从我读到的内容来看,我真的不能说这很糟糕,也不能说它有多糟糕。
你很困惑,你的审稿人似乎也是。首先,构造函数参数不是 "imports"。他们是争论。
如果你有这样的构造器:
constructor(foo: string)
那么foo
就是一个论据,而且只是一个论据。它不是对象的 属性。所以使用 this.foo
会出错。它只是一个常规参数,仅在构造函数内部可见(即局部变量)。
如果在参数前添加可见性修饰符(private、protected、public),那么它也变成了属性。 IE。此代码
constructor(private foo: string) {}
相当于此代码:
private foo: string;
constructor(private foo: string) {
this.foo = foo;
}
因此,在这样的构造函数中,foo
既是一个局部变量,可与 foo
一起使用,也是一个私有变量 属性,可与 this.foo
一起使用。两个变量引用相同的值,因此使用 foo.length
(例如)或 this.foo.length
是等效的。
在 Angular2+ 示例中,我经常看到在构造函数中作为参数传递的导入模块由 'this.' 符号引用。这对我来说确实有意义,因为他们是 class 的成员,因此应该可以通过 class 的 'self' 访问。所以一般来说代码看起来像这样:
import { Component } from '@angular/core';
import { SomeModule } from '@somewhere';
@Component({ ... })
export class SomeComponent {
constructor( private _importedModule: SomeModule ) {
this._importedModule.doesSmethingSpecial();
}
}
但是,在 TypeScript 示例中,我经常看到 'self' 引用被省略。我的意思是这样的:
new_member_from_outside = is_something_external;
class SomeClass extends Something {
some_variable: some_type;
constructor( new_member_from_outside ) {
this.some_variable = new_member_from_outside.doingSomethingSpecial();
}
}
因此我开始在我的 Angular2+ 代码中使用它,如下所示:
import { Component } from '@angular/core';
import { SomeModule } from '@somewhere';
@Component({ ... })
export class SomeComponent {
constructor( private _importedModule: SomeModule ) {
_importedModule.doesSomethingSpecial();
}
}
代码有效,没有错误,我的 IDE 中没有 linter blood,但我的代码的审阅者重写它以使用 'this.' 并评论说我没有正确使用范围。我想知道。我的方法有问题吗?态度不好吗?如果是,我的方法到底是如何混淆范围的?我问了我的审稿人,答案是 -> 研究范围(有帮助 :D)。从我读到的内容来看,我真的不能说这很糟糕,也不能说它有多糟糕。
你很困惑,你的审稿人似乎也是。首先,构造函数参数不是 "imports"。他们是争论。
如果你有这样的构造器:
constructor(foo: string)
那么foo
就是一个论据,而且只是一个论据。它不是对象的 属性。所以使用 this.foo
会出错。它只是一个常规参数,仅在构造函数内部可见(即局部变量)。
如果在参数前添加可见性修饰符(private、protected、public),那么它也变成了属性。 IE。此代码
constructor(private foo: string) {}
相当于此代码:
private foo: string;
constructor(private foo: string) {
this.foo = foo;
}
因此,在这样的构造函数中,foo
既是一个局部变量,可与 foo
一起使用,也是一个私有变量 属性,可与 this.foo
一起使用。两个变量引用相同的值,因此使用 foo.length
(例如)或 this.foo.length
是等效的。