2013-07-03 2 views
0

Итак, я искал по всему миру, но не смог найти ответ на этот вопрос (вероятно, потому, что я понимаю это неправильно).Как вызвать функцию «Объекты» для всех экземпляров объекта

У меня есть функция 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.

Каков наилучший способ достичь этого? В настоящее время, когда окно прокручивается, я вижу консольный журнал для прокрутки, но затем messsage, что нет метода checkForUpdates. Я считаю, что это относится к экземпляру jQuery, а не к экземпляру Gadget. Как я могу вызвать 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

Я не думаю, что вы хотите использовать «прототип» в этом случае. Вам нужно будет сделать экземпляр Gadget, например 'var gadget = new window.Gadget()', тогда вы можете установить свойства для экземпляра следующим образом: 'gadget.hasBeenRevamped = false;'. Это ответ на вашу очередь? – JAM

2

Это должна быть функция. Как это ...

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

А относительно this в вашей функции Jquery, вы можете сделать это.

... 
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*/ 
    }); 
... 
Смежные вопросы