在ES6中调用方法时出错

时间:2017-03-30 12:17:28

标签: javascript ecmascript-6

我在从类中的onChange事件调用方法时遇到错误,没有定义this.filterEvents?无法弄明白为什么?

我试过用Datepicker.filterEvents或this.constructor.filterEvents和this.filterEvents()调用它 - 没有任何运气:( - 所以希望有人可以指出错误所在的正确方向?

代码在这里:

const daterangeConfig = {
  mode: "range",
  minDate: "today",
  dateFormat: "j M",
  weekNumbers: true,
  locale: 'da',
  onChange: function(selectedDates, dateStr) { //instance also param
    //update filter label with selected dates
    let filterBtn = document.querySelectorAll('[data-filterTrigger]');
    let filterBtnIndex = 1;
    let filterLabelTargetSpan = filterBtn[filterBtnIndex].nextElementSibling.querySelector('.btn--filter__labelb');
    filterLabelTargetSpan.innerText = dateStr;
    Datepicker.filterEvents(selectedDates);
  }
};

class Datepicker {
  constructor(container) {
    // Run initializing code once the DOM is ready.
    onReady(() => this.init(container));
    // You can put other initializer-code here if it isn't dependent on the DOM in any way.
    this.picker = new Flatpickr(this.dom.container, daterangeConfig);
  }

  init(container) {
    this.dom = {
      container
    };
  }

  filterEvents(dates) {
    console.log("filter events now");
  }
}

1 个答案:

答案 0 :(得分:0)

如果rep_ZARKGL旨在作为静态方法,意味着其逻辑与filterEvents()类相关但与任何实例无关,那么您可以将其设为静态方法,如下所示

DatePicker

并将其称为class DatePicker { static filterEvents(dates) { ... } }

在您的代码中,您将DatePicker.filterEvents定义为实例方法而不是静态方法,这使得filterEvents()的实例可以访问它,但不能作为DatePicker类的方法使用。如果您打算在DatePicker中执行依赖于特定实例的逻辑,那么应该声明filterEvents(),而不使用filterEvents()关键字,并将其引用为{{ 1}}。重要的是要了解static必须引用相关的this.filterEvents实例。

另请参阅bind()方法,该方法可能有用,具体取决于所需的行为和代码结构。