Переменная объекта не обновляется внутри метода - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь обновить объект, переданный в качестве параметра для метода в моем коде машинописи, но он никогда не меняется:

export class MyClass {

  //...
  myMethod(array) {
    //...
    let myVariable: MyObject;
    array.forEach(currentElement => {
      if (someCondition) {
        this.replaceVariable(myVariable, currentElement);
      }
    });

    console.log(myVariable); // myVariable here is Undefined

    return myVariable;
  }

  private replaceVariable(variableToReplace: MyObject, newValue: MyObject) {
    if (variableToReplace == null) {
      variableToReplace = newValue;
    } else {
      if (someCondition) {
        variableToReplace = newValue;
      }
    }

    console.log(variableToReplace); // variableToReplace here is replaced by newValue
  }
}

Поскольку объекты всегда передаются по ссылке, я ожидал, что myVariable получает новое значение после вызова метода replaceVariable.Но, как видно из комментариев к коду, переменная заменяется внутри метода replaceVariable и сохраняет значение undefined в myMethod

1 Ответ

0 голосов
/ 01 февраля 2019

Поскольку объекты всегда передаются по ссылке, я ожидал, что myVariable получит новое значение после вызова метода replaceVariable

Да, они передаются по ссылке.Однако они не передаются как из переменных.Вы можете изменить, но не можете переназначить.

Разница

Поскольку в JavaScript нет поддержки out переменных, вот ссылка на C # для двух, чтобы вы могли понять разницу:

...