我正在利用javascript程序语言的面向对象功能。我创建了我的类LocationClass,如下所示:
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.");
};
}
我正在调用markerimple函数,如下所示:
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对象时,没有定义对象上下文。例如,如果我检查颜色的值,则应用程序返回“未定义”值。如果我尝试访问该对象中的任何函数,它也是一样的。
欢迎任何帮助。
答案 0 :(得分: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
。