Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
typescript处理程序,其中此[]=值_Typescript - Fatal编程技术网

typescript处理程序,其中此[]=值

typescript处理程序,其中此[]=值,typescript,Typescript,下面的typescript函数在我将要使用的类中,这个[col]=的赋值是我想进一步理解的,这是否意味着我可以访问父类中的col,或者这是将其返回给调用方的另一种方式 export class DemoResponsiveRows implements OnDestroy { private _activeMQC : MediaChange; private _watcher : Subscription; firstCol = "row"; firstColXs = 'column'; fi

下面的typescript函数在我将要使用的类中,这个[col]=的赋值是我想进一步理解的,这是否意味着我可以访问父类中的col,或者这是将其返回给调用方的另一种方式

export class DemoResponsiveRows implements OnDestroy {
private _activeMQC : MediaChange;
private _watcher : Subscription;

firstCol = "row";
firstColXs = 'column';
firstColMd = 'column';
firstColLg = 'invalid';
firstColGtLg = "column";

secondCol = "column";

isVisible = true;

constructor(@Inject(MatchMediaObservable) private _media$) {
this._watcher = this._media$
    .subscribe((e:MediaChange) => {
      this._activeMQC = e;
    });
}

ngOnDestroy() {
this._watcher.unsubscribe();
}

toggleLayoutFor(col) {
switch( col ) {
  case 1:

    col = `firstCol${this._activeMQC ? this._activeMQC.suffix : ""}`;
    this[col] = (this[col] === "column") ? "row" : "column";
    break;

  case 2:
    col = "secondCol";
    this[col] = (this[col] == "row") ? "column" : "row";
    break;
}}}

代码非常混乱,所以我不会试图解释为什么代码按原样编写的原因,只解释它在做什么。另外,我想指出,typescript与为什么代码是以这种形式编写的几乎没有关系——如果代码不是ES6,typescript最多只能提供正在使用的类构造,我对此表示怀疑,因为它使用的是backtick模板文本

也就是说,该方法接受一个参数,
col
,但是提供的值被完全忽略,因为第一条语句用字符串值覆盖该值。该类有一个名为
\u activeMQC
的属性,可以指定也可以不指定该属性;如果赋值,它应该是一个具有名为后缀的属性的对象,我可以假设它可能被赋值,也可能没有被赋值。因此,在第一条语句之后,
col
的值为:

  • “firstCol”,如果
    \u activeMQC
    属性未定义或为假值
  • “firstColundefined”,如果
    \u activeMQC
    属性具有值,但不是具有已定义
    后缀的对象
  • “firstCol”,如果已分配
    \u activeMQC
    属性,并且该属性的
    后缀
    属性的值为
第二条语句将在类上找到一个属性,该属性的名称对应于
col
的值,并将其值设置为“row”或“column”。如果属性的值既不是“行”也不是“列”,它会将其设置为“列”,否则会在这些值之间切换

最后一条语句,
break,完全没有必要

==更新==

此更新是为了回答在javascript中使用点符号(
This.col
)或括号符号(
This[“col”]
)是否正确的问题

我不认为这两种方法中的任何一种都比Javascript中的另一种更正确。但是,如果可能,更常见的方法是使用点表示法,
this.col

使用括号表示法(
this[col]
)的一个常见原因是属性名称是否包含空格或特殊字符。例如,如果一个属性被称为“属性”,那么您不能使用点表示法,但可以使用括号表示法,
this[“属性”]

使用括号表示法的另一个常见原因,如您提供的示例中所示,是您是否需要在运行时确定要访问的属性。例如,假设我们有N个属性,prop1,prop2,…,propN,并且我们想要分配值1,2。。。N.我们可以这样做:

for (var i = 1; i <= N; i++) {
    this['prop' + i] = i;
}

谢谢这是一个代码片段,不包括类及其变量。我试图理解赋值this[col]=以及是否存在另一种类似于this.col=的形式,它在父类中是等效的,或者这[col]=是在javascript中设置类变量的正确方法?我已经更新了答案,以同时回答正确的问题。非常感谢您的回答!我对你投了更高的票,但我是新来的,所以我猜在我有更多的声誉之前,它不会计算它…改成我试图理解的完整的类示例。鉴于更新的问题,我们现在可以看到,
\u activeMQC
将要么是未定义的,要么将具有“Xs”、“Md”、“Lg”或“GtLg”属性。由于后缀值可以在运行时动态更改,因此您询问的代码在运行时将
col
的值计算为“firstCol”、“firstColXs”、“firstColMd”、“firstColLg”或“firstColGtLg”。然后,如果该变量为“行”,则将其值切换为“列”,反之亦然。在“firstColLg”的情况下,如果值是原始的“invalid”,它会将其设置为“column”。
this.prop1 = 1;
this.prop2 = 2;
...
this.propN = N;