2013-07-03 122 views
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。 我相信(這)是指jQuery實例,而不是我的小工具實例。我如何讓jQuery調用checkForUpdates的小工具實例?

在此先感謝!

回答

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

+0

var self =這個技巧! – jamis0n

+0

感謝您的幫助!我很好奇我會用window.gadget.prototype來設置。這會是一種情況,我可以爲所有新的Gadget實例設置一個變量爲特定值?它看起來像這樣:window.Gadget.prototype.hasBeenRevamped = false; – jamis0n

+0

我不認爲你想在這種情況下使用'prototype'。你必須像'var gadget = new window.Gadget()'那樣創建Gadget的實例,然後你可以像這樣設置實例的屬性:'gadget.hasBeenRevamped = false;'。這是否回答你的尷尬? – JAM

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*/ 
    }); 
... 
相關問題