我想在事件监听器函数中使用此关键字。
var MyViewModel = function (file) {
this.status = "";
this.xm = new XMLHttpRequest();
this.xm.addEventListener("load", this.onLoad, false);
};
MyViewModel.prototype.onLoad = function (e) {
this.status = "ok";
};
我无法使用onLoad原型中的 this 关键字访问 MyViewModel 对象。
我如何访问它?
答案 0 :(得分:1)
您可以使用 jQuery.proxy
解决此问题这是指定功能范围。
var MyViewModel = function (file) {
this.status = "";
this.xm = new XMLHttpRequest();
this.xm.addEventListener("load", $.proxy(this.onLoad, this), false);
};
MyViewModel.prototype.onLoad = function (e) {
this.status = "ok";
};
现在您可以将此关键字用作MyViewModel。
答案 1 :(得分:1)
如果没有jQuery,您还可以执行以下操作:
function MyViewModel(file) {
this.status = "";
this.xm = new XMLHttpRequest();
var viewModel = this;
this.xm.addEventListener("load", function(){viewModel.onLoad()}, false);
}
以便使用 viewModel 在闭包中保存对实例的引用,然后用于将 this 设置为调用中所需的值。