【问题标题】:Javascript object changing automatically?Javascript对象自动更改?
【发布时间】:2013-06-15 02:33:53
【问题描述】:

我有以下代码:

var doneFile=convertToMOSTEM(curFile.file,curFile.color,curFile.importance);
console.log('doneFile:');
console.log(doneFile);
debugger;
filesOS.add(doneFile);
debugger;

convertToMOSTEM 返回一个自定义对象。 console.logconvertToMOSTEM 创建的自定义对象记录到控制台,但在控制台之后的调试器语句中直接将其记录为不同的对象。我不想详细说明convertToMOSTEM 的内容,而是询问可能发生这种情况的情况。但是,我可以说convertToMOSTEM 使用自定义构造函数创建了一个自定义对象,然后它修改了该自定义对象的一些属性,然后返回修改后的对象。 console.log 记录了对象的正确版本,但我在调试器语句中得到的对象就像自定义对象的干净版本,没有 convertToMOSTEM 函数应用的额外修改。我不确定这是否很清楚,如果您有任何问题,请在 cmets 中向我提问。

【问题讨论】:

  • 我不明白这怎么会发生。你能建立一个重现问题的最小工作示例吗?
  • 这很奇怪。孤立的代码工作正常,但与此文件中的其他代码一起它搞砸了......

标签: javascript object javascript-objects custom-object


【解决方案1】:

一种可能是您被console.log() 的一些不明显的行为所误导。

当您记录一个对象时,控制台不会保存该对象的所有属性以供以后显示。唯一的实时显示是来自console.log() 的单行打印输出。如果您单击三角形以展开以console.log() 显示的对象,则展开的显示会显示该对象的属性在您单击三角形时,而不是在原始@987654324 时@调用。

为避免这种情况,请在拨打电话时记录您感兴趣的各个属性。例如,如果您有一个具有idnameemail 属性的person 对象,请不要这样做:

console.log( person );

改为这样做:

console.log( person.id, person.name, person.email );

这样,如果这三个属性是字符串值,您将在调用 console.log() 时记录它们的实际值。

【讨论】:

  • 很有趣,但即使这是真的,对象也必须随着时间的推移而变化,即使它是相反的,因为当我打开 console.log 箭头和看到调试器语句中的变量。 +1,因为这很高兴知道,但这并不能解决问题。
猜你喜欢
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2013-11-26
  • 1970-01-01
  • 2016-03-22
  • 2015-02-04
  • 1970-01-01
相关资源
最近更新 更多