为什么如果不在构造函数中绑定它,为什么它可以解决反应组件方法中未定义的不是窗口/global-env



刚刚描述为标题。

我得到了如何解决情况的答案-thisundefined

但没有答案告诉我为什么this是指undefined

我认为,如果没有隐式或明确指定this,则指定window/global-env

当然,在strict-mode中,this将为undefined

这是在运行时确定的,并取决于代码,可能是不同的。

这是

  • 在运行时确定函数时
  • 取决于如何调用函数,而不是函数在哪里定义
  • 对对象的引用。
  • 将永远是一个对象
  • 全局(这(在严格模式下不可用

示例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:使用方法调用

检查

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

使用下面的代码验证方法是否处于严格模式。

在方法中包括以下代码。

有一个类型错误,这意味着方法处于严格的模式,可以解决混乱。

var obj2 = { get x() { return 17; } };
obj2.x = 5; 

相关内容

  • 没有找到相关文章

最新更新