全部要点: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)
[
为什么在设置self.foo时没有设置self.isArchived?
另外,为什么在我执行object.property时设置,而不是在我只记录对象时?
TLDR;
Console.log()是异步的。在我的屏幕截图中,它显示了设置为我想要的属性。当您展开console.log();它似乎重新开火了#39;事件并可以得到不同的价值观。这是因为save()方法也是异步并操纵原始对象。
答案 0 :(得分:5)
问题出现在console.log是异步的:当你记录self对象时,只会记录一个引用,当你点击它时会对它进行评估。
请注意,在screenshot 中:在控制台消息的第一行(未打开状态)中,isArchived
按预期为true
。只有当您手动打开它以进一步检查时,它才会列为false
。可能还有其他东西在记录和手动打开之间修改它。
(我敢打赌,如果你直接记录self.isArchived,你就不会看到这种行为,因为它是一个可以立即打印的原始值。)