将此关键字与javascript原型addEventListener一起使用

时间:2014-04-14 11:48:17

标签: javascript jquery xmlhttprequest

我想在事件监听器函数中使用此关键字。

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 对象。

  • 对象为窗口
  • e 参数是XmlHttpRequest

我如何访问它?

2 个答案:

答案 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 设置为调用中所需的值。