0

私は2つのオブジェクトを持っています

function Response(dbResponseId, responseText){
    this.response = {
        "dbResponseId" : dbResponseId,
        "responseText" : responseText,
        "isDeleted" : false,

    };  

    this.setResponseText = function(responseText){
        this.response.responseText = responseText;
        return this.response;

    };

    this.getId = function(){
        return this.response.frontEndId;
    };
    this.deleted = function(){
        this.response.isDeleted = true;
    };
    return this.response; 
}

function OptionGroup(responses, dbOptionGroupId,isDeleted,id){
    this.optionGroup = {"dbOptionGroupId" : dbOptionGroupId, "responses" : responses, "isDeleted" : isDeleted,"frontEndId" : id};

    this.setResponses = function(responses){
        this.optionGroup.responses = responses;
        return this.optionGroup;
    };
    this.addResponse = function(response){
        this.optionGroup.responses.push(response);
        return this.optionGroup;
    };
    this.getId = function(){
        return this.optionGroup.frontEndId;
    };
    this.setId = function(id){
        this.optionGroup.frontEndId = id;
        return this.optionGroup;
    };
    this.deleted = function(){
        this.optionGroup.isDeleted = true;
        return this.optionGroup;
    };
    this.getResponsesById = function(id){
        for(var i = 0; i < this.optionGroup.responses.length;i++){
            if(id == this.optionGroup.responses[i].getId()){
                return this.optionGroup.responses[i];
            }
        }
        return null;
    };

    return this.optionGroup;
}

ただし、作成した関数のいずれかを呼び出そうとすると、コンソールは、そのオブジェクトにはそのような関数がないことを通知します。コンソールでResponseまたはOptionGroupオブジェクトを印刷すると、オブジェクトのフィールドは表示されますが、どの関数も表示されません。

何が起こっている?

4

2 に答える 2

2

上記のコードのように、コンストラクターとして使用されるオブジェクトから何かを返す場合、その値はnew呼び出しの結果です。返されたオブジェクト (this.responseおよびthis.optionGroup) には、呼び出したい関数が含まれていないことに注意してください。

最も簡単な解決策は、s を削除することreturnです。

于 2012-11-26T04:51:06.913 に答える
0

マットの答えが明確だったかどうかはわかりませんが、

> return this.optionGroup;

optionGroupは、関数がによって参照される新しいオブジェクトではなく、オブジェクトを返すことを意味しますthis

コンストラクターthisはデフォルトで戻ります。そのため、return ステートメントは次と同等ではありません。

return this;

関数についても同じですResponse

もちろん、で関数を呼び出していると仮定しますnew

于 2012-11-26T05:17:20.303 に答える