0

因此,我在 SO 中进行了广泛搜索,但无法找到答案(可能是因为我理解错误)。

我有一个这样定义的 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*/ 
   });
}

我正在尝试找到一种方法来为所有小工具实例调用 checkForUpdates(),因此如果我有 10 个小工具对象,它们都会在我调用该函数时检查更新。

每当窗口根据 jQuery 函数 $(window).scroll 滚动时,我最终想为所有小工具调用此函数。

实现这一目标的最佳方法是什么?目前,当窗口滚动时,我看到控制台日志进行滚动,但随后显示没有方法 checkForUpdates 的消息。我相信 (this) 指的是 jQuery 实例,而不是我的 Gadget 实例。如何让 jQuery 调用我的小工具实例 checkForUpdates?

提前致谢!

4

2 回答 2

2

It has to be a function. Like this...

this.checkForUpdates = function(){
    // ... Your function logic
}

And regarding the this in your jquery function, you can do 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*/ 
   });
...
于 2013-07-03T18:46:07.583 回答
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 作用域内引用实际的小工具对象。

您可以在此处更深入地了解范围。

于 2013-07-03T18:46:25.653 回答