2014-06-21 45 views
0

我正在使用JavaScript程序語言的面向對象的功能。我創建了我的課LocationClass如下:Javascript面向對象 - 因此而不受約束

function LocationClass(id, color, uri) { 

     this.id = id; 
     this.uri = uri; 
     this.color = color; 
     this.locations = ""; 
     this.Group = L.layerGroup(); 
     this.icon = L.MakiMarkers.icon({ 
      color : this.color, 
      size : "l" 
     }); 
     this.Cluster = L.markerClusterGroup(); 

     this.markersimple = function() { 
      console.log(this.color); 


      var options = { 
       onSuccess : loadMarkersSuccess, 
       onFailure : loadMarkersFailure, 
      }; 

      WL.Client.invokeProcedure({ 
       adapter : 'Clases', 
       procedure : 'getRecursos', 
       parameters : [ this.uri ] 
      }, options); 

     }; 
    this.loadMarkersSuccess = function(response) { 

     this.locations = response.invocationResult.results.bindings; 
     console.log(this.color); 
    }; 

    this.loadMarkersFailure = function(response) { 
     alert("No se ha podido obtener la información. Revisa tu conexión."); 
    }; 
    } 

我打電話markersimple功能如下:

var locationclass = new LocationClass(this.id,color,vector[this.id].class.value); 
locationarray.push(locationclass); 

for (var i = 0; i < locationarray.length; i++) { 


     locationarray[i].markersimple(); 


    } 

的問題是,沒有定義對象的情況下當我嘗試訪問onsuccess函數中的locationclass對象。例如,如果我檢查顏色的值,則應用程序返回「未定義」值。如果我嘗試訪問該對象中的任何函數,這也是一樣的。

歡迎任何幫助。

回答

2

您可以使用bind將對象綁定爲this值。

var options = { 
    onSuccess : this.loadMarkersSuccess.bind(this), 
    onFailure : this.loadMarkersFailure.bind(this), 
}; 

或者你可以使用封閉(從構造函數中):

var that = this; 

... 

this.loadMarkersSuccess = function(response) { 

    that.locations = response.invocationResult.results.bindings; 
    console.log(that.color); 
}; 

順便說一句,功能通常應連接到構造函數的prototype

+0

謝謝@plalx! –