2

次の Javascript オブジェクトが定義されています。

var APIUserItem = function () {
var 
    id = '',
    account_id = '',
    client_id = '',
    user_name = '',
    salutation = '',
    first_name = '',
    middle_name = '',
    last_name = '',
    organization_name = '',
    alternate_email = '',
    time_zone_id = '',
    utcoffset = '',
    date_created = new Date(),
    last_updated_date = new Date(),
    is_active = null,
    is_approved = null,
    classes = [],
    groups = [],
    permissions = [],
    properties = {},
    version_stamp_hash_string = '',

    getFromData = function (data) {
        id = data.ID;
        account_id = data.AccountID;
        client_id = data.ClientID;
        user_name = data.UserName;
        salutation = data.Salutation;
        first_name = data.FirstName;
        middle_name = data.MiddleName;
        last_name = data.LastName;
        organization_name = data.OrganizationName;
        alternate_email = data.AlternateEmail;
        time_zone_id = data.TimeZoneID;
        utcoffset = data.UTCOffset;
        date_created = data.DateCreated;
        last_updated_date = data.LastUpdatedDate;
        is_active = data.IsActive;
        is_approved = data.IsApproved;
        properties = data.Properties;
        version_stamp_hash_string = data.VersionStampHashString;

        // list of pointers to classes
        $.each(data.Classes, function (index, value) {
            class_pointer = new APIPointerItem();
            class_pointer.ID = value.ID;
            class_pointer.PublicID = value.PublicID;
            class_pointer.Name = value.Name;
            class_pointer.RelativeURI = value.RelativeURI;

            classes.push(class_pointer);
        });

        // list of pointers to Groups
        $.each(data.Groups, function (index, value) {
            group_pointer = new APIPointerItem();
            group_pointer.ID = value.ID;
            group_pointer.PublicID = value.PublicID;
            group_pointer.Name = value.Name;
            group_pointer.RelativeURI = value.RelativeURI;

            groups.push(group_pointer);
        });

        // list of permissions
        $.each(data.Permissions, function (index, value) {
            permission_pointer = new APIPermissionList();
            permission_pointer.ID = value.ID;
            permission_pointer.Description = value.Description;
            permission_pointer.Category = value.Category;
            permission_pointer.Level = value.Level;
            permission_pointer.ResourceType = value.ResourceType,
                        permission_pointer.Action = value.Action;

            permissions.push(permission_pointer);
    });

};

return {
    ID: id,
    AccountID: account_id,
    ClientID: client_id,
    UserName: user_name,
    Salutation: salutation,
    FirstName: first_name,
    MiddleName: middle_name,
    LastName: last_name,
    OrganizationName: organization_name,
    AlternateEmail: alternate_email,
    TimeZoneID: time_zone_id,
    UTCOffset: utcoffset,
    DateCreated: date_created,
    LastUpdatedDate: last_updated_date,
    IsActive: is_active,
    IsApproved: is_approved,
    Classes: classes,
    Groups: groups,
    Permissions: permissions,
    Properties: properties,
    VersionStampHashString: version_stamp_hash_string,
    GetFromData: getFromData
};

};

次を呼び出して APIUserItem を新規作成すると:

var user = new APIUserItem();
user.GetFromData(data);

次に、次のように新しいアイテムの値にアクセスしてみてください。

document.write(user.ID);

期待されるデータを含むコレクションを除いて、すべてのプロパティ値が空に戻ります。たとえば、オブジェクトの外部から Groups 配列をループ処理し、各グループのプロパティにアクセスして値を表示できます。

GetFromData 関数呼び出しに渡したデータ オブジェクトには、すべてのデータが含まれています。ローカル変数への割り当てが機能していないようです。私は自分のコードで明らかな間違いを犯したに違いないことを知っています。誰でも私の問題を見つけるのを手伝ってもらえますか?

4

1 に答える 1

3

ローカル変数への割り当てはおそらく機能していますが、それらは単なるローカル変数への割り当てです。コードは、オブジェクトのプロパティを更新するために何もしません。ローカル変数からプロパティを初期化するステートメントを介してオブジェクトを作成するという事実はreturn、ローカル変数とプロパティの間に魔法のリンクを作成しません。

「getFromData」関数は次のようになります。

function getFromData( data ) {
  this.ID = data.ID;
  this.AccountID = data.AccountID;
  // and so on
}

コレクションのプロパティ (「クラス」、「グループ」、「権限」) はオブジェクトであるため機能し、その内容を更新します。その部分は大丈夫です。実際、これらのローカル変数はまったく必要ありません。オブジェクトのプロパティを直接初期化できます。

于 2013-05-30T16:54:40.117 に答える