在Backbone中,model.get('foo')和model.attributes.foo之间的任

In Backbone, any difference between model.get('foo') and model.attributes.foo?

本文关键字:foo model attributes 之间 Backbone get      更新时间:2023-09-26

在Backbone.js中,有两种方法可以获得单个属性的值:

  1. var foo = model.get('foo');
  2. var foo = model.attributes.foo;

.get()方法是文档中推荐的方法,但可能会慢一点,因为它涉及到额外的函数调用。

有什么理由为什么我不应该使用.attributes方法?是否存在会导致意外行为的情况?

这是一个封装问题。通过使用get方法,你说我不在乎它是如何实现的,我只想要那个属性。所以在将来,如果你想重写你的get方法来返回一些更有意义的东西,你就不必在你使用该属性的任何地方做代码更改。

例如,如果你的模型有一个与之相关联的属性成本,它是一个数字。

model.get('cost') //would give you that number say 1999.99 

如果将来你想让它返回一个格式化的字符串,你可以重写get方法。

model.get('cost') // same method would now give you $1999.99 or EUR 1999,99 in french :)

你还减少了代码量,增加了可读性。

model.get('foo')比model.attributes.foo;而且更短

正如您在问题中提到的,.get()方法是文档中推荐的方法。尽管直接调用该属性可以节省几纳秒的时间,但您不应该这样做。

的原因是它可能鼓励别人阅读你的代码使用相同的方法来设置一个属性:model.attributes.foo = 'blah';

我可能不用告诉你这很糟糕。代码似乎可以工作,因为您在模型上获得了正确的值,但是您绕过了骨干网中内置的所有更改跟踪逻辑。如果这样设置属性,则不会触发任何事件。

也就是说,如果除了你自己没有其他人在读你的代码或者修改你的代码,并且你非常关心那些额外的纳秒,并且你知道以后你将不会犯这种类型的错误。那么无论如何,直接使用attributes属性