无法在javascript对象上设置属性

时间:2015-05-06 13:40:08

标签: javascript node.js

全部要点:https://gist.github.com/jonny2779/1e59c3a97b910b09240c

Self是一个js模型,里面有所有方法。

Moodboard.prototype = {

代码:

      var self = this;
      self.isArchived = true;
      self.foo = true;
      console.log('is archived property', self.isArchived);
      console.log('self object', self);
      return self.save();

此代码的结果:(注意设置了self.foo)

[console screenshot showing <code>true</code> standalone <code>isArchived</code> property but <code>false</code> property inside object][1]

为什么在设置self.foo时没有设置self.isArchived?

另外,为什么在我执行object.property时设置,而不是在我只记录对象时?

TLDR;

Console.log()是异步的。在我的屏幕截图中,它显示了设置为我想要的属性。当您展开console.log();它似乎重新开火了#39;事件并可以得到不同的价值观。这是因为save()方法也是异步并操纵原始对象。

1 个答案:

答案 0 :(得分:5)

问题出现在console.log是异步的:当你记录self对象时,只会记录一个引用,当你点击它时会对它进行评估。

请注意,在screenshot 中:在控制台消息的第一行(未打开状态)中,isArchived按预期为true。只有当您手动打开它以进一步检查时,它才会列为false。可能还有其他东西在记录和手动打开之间修改它。

(我敢打赌,如果你直接记录self.isArchived,你就不会看到这种行为,因为它是一个可以立即打印的原始值。)