如何为对象的所有实例调用Objects函数

时间:2013-07-03 18:43:33

标签: javascript jquery object prototype

所以我在搜索范围内进行了广泛搜索,但未能找到答案(可能是因为我理解错了)。

我有一个像这样定义的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实例?

提前致谢!

2 个答案:

答案 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