将函数传递给javascript类

时间:2017-01-30 21:12:11

标签: javascript jquery

在我的index.html上,我有这段代码,

$(document).ready(function() {
    var self = this;
    var submit = function() {
        alert("Test");
    }
    const form = new Form(self.submit);
})

在我的Form.js中,我有这段代码,

class Form() {
    constructor(func) {
        var self = this;
        // ...
        $("submitBtn").click(function(e) {
           e.preventDefault();
           self.func();
        });
        // ...
    }
}

为什么单击submitBtn后我的函数没有执行? 我用自己来得到这个"这个"值。我不能使用"新表格(self.submit())"因为它会在读取行后执行该函数。

2 个答案:

答案 0 :(得分:3)

您的nil函数是本地变量,而不是submit的属性。因此,您需要:

this

同样,在您的构造函数中,const form = new Form(submit); func没有任何关系;它应该只是

self

答案 1 :(得分:1)

Pointy回答了这个问题。我只想补充一点,构造函数是你通常声明和初始化实例属性的地方,最好在类方法中注册click事件,例如:

class Form{
  constructor(){}
  click(func){
     $("submitBtn").click((e)=>{
           e.preventDefault();
           func();
        });
  }

}

只要您使用箭头功能,您也不需要缓存范围var self = this。这个答案可能很有用Advantages of using prototype, vs defining methods straight in the constructor?