gpt4 book ai didi

javascript - JQuery 延迟更改 "this"

转载 作者:可可西里 更新时间:2023-11-01 02:20:36 25 4
gpt4 key购买 nike

我正在尝试让一个 javascript 对象运行一个延迟方法,当它的 .done() 调用同一对象中的一个函数时。我遇到问题是因为“this”变成了延迟对象而不是调用它的对象。

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将返回绑定(bind)到特定上下文的函数:

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));
};

applycall 可以使用指定的上下文立即执行一个函数,但是 proxybind 返回一个可以稍后使用或传递给其他函数的函数。

关于javascript - JQuery 延迟更改 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12291850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com