Javascript面向对象 - 结果未定义

时间:2014-06-21 18:39:19

标签: javascript

我正在利用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对象时,没有定义对象上下文。例如,如果我检查颜色的值,则应用程序返回“未定义”值。如果我尝试访问该对象中的任何函数,它也是一样的。

欢迎任何帮助。

1 个答案:

答案 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