javascript – JQuery延迟更改“this”

前端之家收集整理的这篇文章主要介绍了javascript – JQuery延迟更改“this”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图让一个 JavaScript对象运行一个延迟的方法,当它是.done()调用同一个对象的一个​​函数.我有问题,因为“这”成为延迟对象,而不是调用它的对象.
PageObject.prototype.successFunction = function() {
  console.log(arguments);
  return console.log(this.name + " Success function called");
};

PageObject.prototype.loadPage = function(url) {
  return $.when($.mobile.loadPage("pages/" + url))
    .done(this.successFunction);
};

var pg = new PageObject();
pg.loadPage("test.html");

如何将“this”发送到successFunction?这个PageObject也会被其他人扩展,所以在运行successFunction时知道“this”将会非常方便.

看起来很简单,可能有一个简单的答案.我正在研究.apply(),但我不确定它是否有帮助.这个堆栈溢出的帖子有一点帮助,但是我把它放在.done()函数中的一分钟就打破了.

Functions as parameters (with parameters) — JavaScript

解决方法

jQuery的 proxy将返回一个绑定到特定上下文的函数
PageObject.prototype.loadPage = function(url) {
  return $.when($.mobile.loadPage("pages/" + url))
    .done($.proxy(this.successFunction,this));
};

还有ES5的bind,其操作方式类似,但需要在旧版浏览器中进行闪烁

PageObject.prototype.loadPage = function(url) {
  return $.when($.mobile.loadPage("pages/" + url))
    .done(this.successFunction.bind(this));
};

apply和call可以使用指定的上下文立即执行一个函数,但是proxy和bind可以返回一个以后可以使用的函数或者传递给其他函数.

猜你在找的jQuery相关文章