我具有以下功能并具有许多绑定...
showDialog: function(data) {
var dialog = new dialog({
onOk: function(text) {
var obj = {
data: text.data
};
this.model.save(obj, {
method: 'PUT',
success: function() {
this.success().bind(this)
}.bind(this)
});
}.bind(this)
});
Main.dialogArea.show(dialog);
}
尽管代码可以正常工作,但它会在控制台中引发以下错误...
未捕获的TypeError:无法读取未定义的属性“ bind”
该错误与以下行this.success().bind(this)
有关。
我意识到如果我改用var self = this
可以解决此问题...
showDialog: function(data) {
var self = this;
var dialog = new dialog({
onOk: function(text) {
var obj = {
data: text.data
};
self.model.save(obj, {
method: 'PUT',
success: function() {
self.success()
}
});
}
});
Main.dialogArea.show(dialog);
}
如果执行此操作,错误消失。知道为什么吗?两种情况都不应该一样吗?我没有使用ES6,所以不能使用箭头功能,我想使用bind()
。
答案 0 :(得分:2)
应该是
this.success.bind(this)
代替this.success().bind(this)
。
当前,您正在调用该函数,该函数返回undefined
,并且您正在对其调用.bind
。
旁注:
因为您在做
success: function() {}.bind(this)
您不必在其中绑定直接方法调用,即
success: function() {
this.success();
}.bind(this)
应该工作,或者只是
success: this.success.bind(this)