почему это разрешается неопределенным, а не window / global-env в методе реагирующего компонента, если он не связывает это в конструкторе - PullRequest
0 голосов
/ 05 мая 2019

Только что описал как заголовок.

Я получил ответы, что как исправить ситуацию - this относится к undefined.

Но ни один ответ не говорит мне, почему this относится кundefined.

По моему мнению, this будет ссылаться на window/global-env, если это не указано явно или явно.

Конечно, this будет undefinedкогда в strict-mode.

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

используйте приведенный ниже код для проверки того, что метод находится в строгом режиме или нет.

Включите приведенный ниже код в метод.

Получена ошибка типа, это означает, что метод находится в строгом режиме, что разрешаетпутаница.

var obj2 = { get x() { return 17; } };
obj2.x = 5; 
0 голосов
/ 05 мая 2019

Это определяется во время выполнения и, в зависимости от кода, может быть чем-то другим.

это

  • определяется во время выполнения, когда вызывается функция
  • определяется тем, как вызывается функция, а не тем, где определен
  • ссылка на объект.
  • всегда будет объектом
  • глобальный (это) недоступен в строгом режиме

Пример 1: this = window

var name = 'Global';

var callName1 = function() {
  var name = 'Peter';
  console.log('--- From callName1 ----');
  console.log(this.name);
  //console.log(this);
  callName2();
}


var callName2 = function() {
  var name = 'Jane';
  console.log('--- From callName2 ----');
  console.log(this.name);
  //console.log(this);
}

callName1();

var execute = function(fn) {
  var name = 'Mary';
  console.log('--- From execute ----');
  console.log(this.name);
  //console.log(this);
}

execute(callName2);

Пример 2: недоступно в строгом режиме

'use strict';

var name = 'Global';

var callName1 = function() {
  var name = 'Peter';
  console.log('--- From callName1 ----');
  console.log(this.name);
  console.log(this);
}

callName1();

Пример 3: проверка this с вызовом метода

var name = 'global';

var obj = {
  name: 'James Obj1',
  func: function() {
    console.log('--- From func ----');
    console.log(this.name);
    console.log(this); // this reference obj1
  }
}

obj.func()

var obj2 = {
  name: 'Jame Obj2',
  func: obj.func // this reference obj2, but the function is defined in obj1
}

obj2.func()

var obj3 = {
  name: 'Kane Obj3',
  obj4: {
    name: 'Mary Obj4',
    func: function () {
      console.log('--- From obj4 ----');
      console.log(this.name);
      console.log(this); // this reference obj4
    }
  }
}
obj3.obj4.func()

С () => {} функцией эта - лексически связана. Это означает, что он использует this из кода, который содержит функцию стрелки.

...