如何避免在javascript类中解决“ this”问题?

问题描述 投票:-1回答:2
get_O3(e)
{
    e.preventDefault();

    let station = document.getElementById(e.target.id);

    let lon = station.getAttribute('lon');

    let lat = station.getAttribute('lat');

    let code_station = station.getAttribute('code');

    this.get_previsions(lon, lat, "O3").bind(this).then((data) => 
    {
        console.log(data);
    });
}

我有一个“此”问题,当我调用函数get_previsions时出现错误:未捕获的TypeError:this.get_previsions不是函数。这可能是由于(e)参数,因为当我执行console.log(this)时,它将返回目标。我希望这==我的课。感谢您的帮助

javascript class this
2个回答
0
投票

在任何给定点,您都可以通过执行以下4条规则来检查当前this参考所指向的是什么:

  1. New:使用new调用了该函数,然后this指向新实例。
  2. Explicit Binding:是使用Function#callFunction#applyFunction#bind]调用的函数>
  3. 隐式绑定
  4. :该函数是否由其所有者调用? (即owner.foo()owner["bar"]()
  5. 默认规则
  6. :如果没有其他规则发生,则如果脚本以this模式运行,则window设置为"use strict"对象,否则以undefined开头。

    事件侦听器使用显式绑定(callBack.call(target, ...))调用函数,因此this引用将设置为目标。要更改this参考,您需要包装并隐式调用它,或使用Function#bind

隐式呼叫示例:

var something = {
  foo: function() {
    var self = this;
    addEventListener("click", function(e) {
      self.bar(e);
    });
  },
  bar: function() {

  }
};

显式调用示例(功能#绑定):

var something = {
  foo: function() {
    addEventListener("click", this.bar.bind(this));
  },
  bar: function() {

  }
};

0
投票

我假设您定义的类类似于

© www.soinside.com 2019 - 2024. All rights reserved.