2016-12-28 4 views
0

Следующая функция машинописного текста была в классе, который я собирался использовать, и назначение этого [col] = - это то, что я хотел бы понять дальше, означает ли это, что я могу получить доступ к col в родительский класс или это другой способ вернуть его вызывающему?, где this [] = значение

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; 
}}} 
+0

Изменено завершить пример класса, который я пытался понять – gmaon

+0

Учитывая обновленный вопрос, теперь мы можем видеть, что '_activeMQC' будет либо неопределенным, либо будет иметь свойство «Xs», «Md», «Lg» или «GtLg». Поскольку значение суффикса может динамически меняться во время выполнения, запрашиваемый вами код вычисляет значение 'col' во время выполнения как« firstCol »,« firstColXs »,« firstColMd »,« firstColLg »или« firstColGtLg ». Затем он переключает значение этой переменной в «Столбец», если это «Строка» или наоборот. В случае «firstColLg», где значение является оригинальным «недействительным», оно устанавливает его в «столбец». – GPicazo

ответ

0

Код очень запутанным, поэтому я не буду пытаться объяснить рассуждения, почему пишется код, как есть, только то, что он делает. Кроме того, я хотел бы указать, что машинописный текст имеет мало или ничего общего с тем, почему код написан в этой форме - в лучшем случае единственная роль, которую может выполнять скрипт-скрипт, - это создание используемой конструкции класса, если код - это не ES6, и я сомневаюсь, что он использует литералы шаблона backtick.

При этом метод принимает параметр col, но предоставленное значение полностью игнорируется, поскольку первый оператор переопределяет значение строковым значением. Класс имеет свойство, называемое _activeMQC, которое может быть присвоено или не назначено; если он назначен, ожидается, что это объект со значением, называемым суффиксом, который я могу предположить, может или не может быть назначен. Таким образом, после первого заявления, значение col либо:

  • «firstCol», если _activeMQC свойство не определено или является falsy значение.
  • «firstColundefined», если _activeMQC свойства имеет значение, но не является объект с определенным suffix свойством
  • «firstCol < суффиксом >», если _activeMQC свойства назначается и имеет suffix свойство со значением < Суффикс >.

Второй оператор найдет свойство класса с именем, соответствующим значению col, и установите его значение в «row» или «column». Если значение свойства не является ни «строка», ни «столбец», он устанавливает его в «столбец», иначе он будет переключаться между этими значениями.

Последнее заявление, break;, совершенно не нужно.

== UPDATE ==

Это обновление в ответ на вопрос о том, является ли он правильно использовать точечную нотацию (this.col) или кронштейн обозначения (this["col"]) в JavaScript.

Я не думаю, что в Javascript в любом случае более правильный, чем другой. Однако более распространенным способом является использование точечной нотации, this.col, когда это возможно.

Одной из распространенных причин использования скобок нотации, this[col], является то, что если имя свойства имеет пробелы или специальные символы. Например, если свойство было названо «свойством», то вы не могли использовать точечную нотацию, но могли бы использовать нотацию скобок, this["the property"].

Другим распространенным основанием для использования обозначения скобок, как в приведенном примере, является необходимость определения свойства для доступа во время выполнения. Например, предположим, что у нас есть N свойств, prop1, prop2, ..., propN и мы хотим присвоить значения 1, 2 ... N.Мы могли бы сделать это следующим образом:

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

С точечной нотации, вы должны назначить каждому по отдельности:

this.prop1 = 1; 
this.prop2 = 2; 
... 
this.propN = N; 
+0

спасибо. это был фрагмент кода, а класс и его переменные не были включены. Я пытался понять назначение этого [col] = и есть ли другая форма, такая как this.col =, что эквивалентно в родительском классе или это [col] = правильный способ установки переменных класса в javascript? – gmaon

+0

Я обновил ответ, чтобы ответить на вопрос о том, что правильно. – GPicazo

+0

Ваш ответ был высоко оценен! Я поддержал вас, но я новичок, поэтому я думаю, что он не вычисляет его до тех пор, пока у меня не будет больше репутации ... – gmaon

Смежные вопросы