Как передать область действия функции (не контекст)? - PullRequest
0 голосов
/ 21 мая 2019

Можете ли вы помочь мне найти ошибку в коде?Мне нужно передать область видимости одного метода другому.

var obj = {
    doIt: function() {
        var a = 10;
        this.doThat.call(this);
    },
    doThat: function() {
        console.log(a);
    }
};

obj.doIt();

Ответы [ 3 ]

1 голос
/ 21 мая 2019

Вы делаете передаваете "контекст" (он же this). a однако, это не часть текущего контекста, а текущая область. Таким образом, вы либо перемещаете a в контекст:

 var obj = {
   doIt: function() {
    this.a = 10;
    this.doThat();
  },
  doThat: function() {
    console.log(this.a);
  }
};

Или вы просто передаете значение a в doThat:

   //...
  this.doThat(a);

  doThat(a) { /*...*/ }
1 голос
/ 21 мая 2019

Если вы хотите получить доступ к a в контексте, вы можете попробовать это.

var obj = {
    doIt: function() {
        this.a = 10;
        this.doThat.call(this);
    },
    doThat: function() {
        console.log(this.a);
    }
};

obj.doIt();
0 голосов
/ 21 мая 2019

Вы должны понимать, что есть разница между context и scope.Область видимости будет чем-то, что будет определять, какие переменные доступны с определенного сайта, тогда как контекст - это то, что будет значением этого значения на конкретном сайте или внутри функции.

, поэтому, если вы хотите использовать значение a в функции doThat необходимо связать значение a с this, которое является контекстом в функции doIt, например: this.a = 10;, а затем получить к нему доступ, используя console.log(this.a) внутри функции doThat

...