title: calling an object method with a setTimeout function from within the same object in Javascript
body: <p>OBeen bangin my head against the desk with this one and I have tried the answers I find on SE. Please help.</p>
  
  <p>I have a function that polls an api for new data. All I want is for the function to repeat itself every 10000 ms. I thought the following would work:</p>
  
  <pre><code>    //SURVIVORS_OBJECT
  //Store the suvivor object and append the map markers and some additional parameters to it
  var survivorMarkers;
  function dz_survivorMarkers(){
      //The survivors will be stored as an 'armaMapMarker' object 
      this.survivors = {};
      //Clear a survivor from the list because by id (eg: has not been returned in our query)
      this.clearSurvivor = function(pId){
          this.survivors[pId].marker.setMap(null);
          delete this.survivors[pId];
      };
      //make the api request from the overwatch data api
      this.getSurvivorsRequest = function(){
          console.log('UDBG:::survivorMarkers.getSurvivors ENTERED');
          //the callback function is passed as well
          api.getSurvivors(this.setSurvivors)
      };
      //Set survivors
      //This is the big one - here we will loop through all our existing survivors and check
      //  if they have been returned in the new reponse. If so, we will update their position on
      //  the map and add a poly line from their last position to their new one
      //We will also check if their info window is open, and will open it again for the user
      //The detail window will be checked if it is open too, and it's contents will be refreshed
      this.setSurvivors = function(pResponse) {
          console.log('UDBG:::survivorMarkers.setSurvivors ENTERED');
          console.log(pResponse);
  //          try {
              if(pResponse.errors.length &gt; 0) {
                  exceptionHandler.e('SRV100',pResponse.errors.message);  
              } else {
                  //First go through all our existing survivors, and see if they are in this request too
                  var newSurvivors = {};
                  for(var id in pResponse.records) {
                      //console.log('UDBG:::survivorMarkers.setSurvivors looping through survivor[' + id + ']');
                      var newSurvivor = new armaMapMarker('SURVIVOR', pResponse.records[id]);
  
                      //check if this record is in our existing list of survivors
                      if(this.survivors != null &amp;&amp; this.survivors[id] != null) {
                          //set our interface options if any
                          newSurvivor.detailWindowIsOpen = this.survivors[id].detailWindowIsOpen;
                          newSurvivor.infoWindowIsOpen = this.survivors[id].infoWindowIsOpen;
                          //And clear the old data
                          this.clearSurvivor(id);
                      }
                      newSurvivors[id] = newSurvivor;
                  }
                  //Now go through all our old survivors, and see if they were NOT in the response and can be removed
                  for(var id in this.survivors) {
                      if(pResponse.records[id] == null) {
                          this.clearSurvivor(id);
                      }
                  }
                  this.survivors = newSurvivors;
              }
  //          } catch (e) {
  //              alert(e);   
  //          }
          setInterval(function(){survivorMarkers.getSurvivorsRequest()},5000);
      }
  }
  </code></pre>
  
  <p>It will run once, but the second time will get an exception:</p>
  
  <pre><code>Uncaught TypeError: Object [object global] has no method 'clearSurvivor'
  </code></pre>