1

私のウェブサイトには次のコードがあります。

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 のすべてのパラメーターは、パラメーター「color」を除いて正しいです。console.log(GlobalDB[0]) は以下を返します:

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

Chrome と Firefox の両方で、色 "AB8B00" に同じ値をもたらします。理由はありますか?上記のコードから、0 になるはずです。console.log(GlobalDB[0].color) は 000000 を返します。しかし、コールバックから戻るときに GlobalDB を使用すると、再び AB8B00 が返されます。

一方、ユーザーの有効化は問題なく機能します。Chrome と Firefox の両方で失敗するため、パラメーター .color の問題の原因を見つけることができません。

前もって感謝します。

4

1 に答える 1

2

あなたはconsole.log私が頻繁に経験した問題に直面しているようです:ログに記録されたときのオブジェクトは正確には表示されませんが、後で表示されます。これは、ブラウザがログに記録したときにすぐにオブジェクトをディープクローン化せず、参照を保存するだけだからです。 。

この効果は文字列のようなプリミティブには影響しません。そのため、ログに記録すると最初は色がきれいに表示されますGlobalDB[0].color

ログに記録すると、色は「000000」になります。後で、おそらくを呼び出すと変更されますcallback(GlobalDB)

この関連する質問(および回答)も参照してください。

于 2013-01-12T18:48:03.360 に答える