所以我在搜索范围内进行了广泛搜索,但未能找到答案(可能是因为我理解错了)。
我有一个像这样定义的JS函数(非常简化):
window.Gadget = function(name, cost){
this.name = name;
this.cost = cost;
this.hasBeenRevamped = false;
this.checkForUpdates = function(){
console.log("checking for updates...");
}
window.$(window).scroll(function() {
console.log("scrolling...");
this.checkForUpdates(); /* The this here is erroneously referring to jQuery and not my Gadget Object. I need to fix this but am not sure how*/
});
}
我正在尝试为所有Gadget实例调用checkForUpdates(),所以如果我有10个Gadget对象,那么当我调用该函数时,它们都会检查更新。
每当窗口按照jQuery函数$(window).scroll滚动时,我最终都希望为所有小工具调用此函数。
最好的方法是什么?目前,当窗口滚动时,我看到控制台日志滚动,但后来发现没有方法checkForUpdates的消息。 我相信(这)指的是jQuery实例而不是我的Gadget实例。我怎样才能让jQuery调用checkForUpdates的Gadgets实例?
提前致谢!
答案 0 :(得分:2)
它必须是一个功能。像这样......
this.checkForUpdates = function(){
// ... Your function logic
}
关于你的jquery函数中的this
,你可以这样做。
...
var thisObj = this;
window.$(window).scroll(function() {
console.log("scrolling...");
thisObj.checkForUpdates(); /* The this here is erroneously referring to jQuery and not my Gadget Object. I need to fix this but am not sure how*/
});
...
答案 1 :(得分:2)
试试这个:
window.Gadget = function(name, cost){
this.name = name;
this.cost = cost;
this.hasBeenRevamped = false;
this.checkForUpdates = function(){
console.log("checking for updates...");
}
var self = this;
window.$(window).scroll(function() {
console.log("scrolling...");
self.checkForUpdates(); /* self instead of this */
});
}
首先,您对checkForUpdates
的定义是错误的。您需要将其定义为一个可以工作的函数。
其次,我在您的范围中添加了一个名为self
的变量,因此您可以引用jQuery范围内的实际小工具对象。
您可以更深入地了解范围here。