无法使用函数使用值填充Javascript对象属性

时间:2013-05-30 16:51:09

标签: javascript

我定义了以下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函数调用的数据对象包含所有数据 - 它似乎只是局部变量的赋值不起作用?我知道我的代码中肯定会犯一些明显的错误。任何人都可以帮我找到我的问题吗?

1 个答案:

答案 0 :(得分:3)

您对局部变量的赋值可能正常,但它们只是:对局部变量的赋值。您的代码不会更新对象的属性。通过从局部变量初始化属性的return语句创建对象的事实不会在局部变量和属性之间创建魔术链接。

您的“getFromData”函数应如下所示:

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

集合属性(“类”,“组”,“权限”)起作用,因为它们是对象,并且您更新其内容。那部分没问题。真的,你根本不需要那些局部变量;你可以直接初始化对象属性。