在我的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())"因为它会在读取行后执行该函数。
答案 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?