2013-01-12 28 views
1

設置我在我的網站下面的代碼:在對象參數不正確在JavaScript

function GroupObject(GroupID, GroupColor, GroupName, CalendarID, UserEnable, IrcChannel) { 
    this.uid = GroupID; 
    this.color = GroupColor; 
    this.groupname = GroupName; 
    this.calendarid = CalendarID; 
    this.userenable = UserEnable; 
    this.ircchannel = IrcChannel; 
} 

function GetGroupObjects(callback) { 
    var GlobalDB = []; 
    $.getJSON("Some Data From Google Docs", 

    function (data) { 

    $.each(data.feed.entry, function (i, entry) { 
     GlobalDB.push(new GroupObject(entry.gsx$uid.$t, 
     "000000", 
     SanitizeInputText(entry.gsx$group.$t), 
     SanitizeInputCalID(entry.gsx$calendarid.$t), 
     true, 

     SanitizeInputText(entry.gsx$ircchannel.$t))) 
    }); 

    console.log(GlobalDB[0]); 
    console.log(GlobalDB[0].color); 
    callback(GlobalDB); 
    }); 
}; 

所有新創建的GlobalDB的參數與參數「色」的唯一例外是正確的。的console.log(GlobalDB [0])返回:

GroupObject 
calendarid: "CalOfTNG" 
color: "AB8B00" 
groupname: "Austin TNG" 
ircchannel: "AustinTNG" 
uid: "TNG" 
userenable: true 
__proto__: GroupObject 

它帶來相同的值用於彩色 「AB8B00」 在器和Firefox。任何想法爲什麼?從上面的代碼它應該是0. console.log(GlobalDB [0] .color)確實返回000000.但是,當我從回調中返回時使用GlobalDB 我再次獲得AB8B00。

用戶啓用,另一方面工作得很好。我只是無法找到什麼是因爲它在Chrome和Firefox中都失敗而導致參數.color的問題。

在此先感謝。

回答

2

您似乎受到我經常遇到的console.log問題的困擾:您沒有看到與登錄時完全相同的對象,但因爲它稍後,因爲瀏覽器在您登錄時沒有立即深入克隆它但只是存儲其參考。

此效果不會影響原始類型,如字符串,這就是爲什麼當您登錄GlobalDB[0].color時顏色最初看起來很好。

登錄時顏色爲「000000」。它發生變化後,可能當您撥打callback(GlobalDB)

另請參閱this related question (and answer)

+0

感謝您的回答! – Thelemitian