Javascript类,访问属性回调

时间:2017-09-13 16:13:07

标签: javascript ecmascript-6 es6-class

我有以下类似的javascript类:

class ModalFormButton {

  constructor() {
    this.contactForm = new ContactForm();
    let utils = new Utils();
    this.$signupModal = $(utils.getModalTmpl());
  }

  loadContactForm() {
    this.$signupModal.modal();
    this.contactForm.load();
  }

  contactBtnHandler(e) {
    e.preventDefault();
    let utils = new Utils();
    var $t = $(this),
        $modalTitle = $t.data('modal-title'),
        $modalFormId = $t.data('modal-form-id');

    $('body').append(this.$signupModal);
    this.$signupModal.find('.modal-title').html($modalTitle);
    this.$signupModal.find('.modal-body').load($t.attr('href') + ' #' + $modalFormId,this.loadContactForm);
  };

  registerHandlers() {
    $('.modal-form-btn').click(this.contactBtnHandler);
  };

  load() {
    this.registerHandlers();
  };
}

我的问题是,当调用contactBtnHandler时,我无法访问类属性,因为上下文属于modal-form-btn。 我知道我可以使用箭头函数来解决这个问题,但是我想知道是否可以在函数中分离回调中的逻辑(这里是一个简短的例子,但我有更长的函数),其方式与我的类似使用。

由于

2 个答案:

答案 0 :(得分:2)

您可以尝试在回调处理程序

中将“this”绑定到您的班级
registerHandlers() {
    $('.modal-form-btn').click(this.contactBtnHandler.bind(this) );
  };

答案 1 :(得分:1)

可以这样做:

getHandler (){
  return e => {
    //this is ModalFormButton
  };
}

然后:

 $('.modal-form-btn').click(this.getHandler());