在Backbone.js中,有两种方法可以获得单个属性的值:
var foo = model.get('foo');
var foo = model.attributes.foo;
.get()
方法是文档中推荐的方法,但大概有点慢,因为它涉及额外的函数调用。
我有什么理由不使用.attributes
方法吗?是否有任何导致意外行为的情况?
答案 0 :(得分:4)
这是一个封装问题。通过使用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好得多;而且它也更短。
答案 1 :(得分:2)
正如您所提到的,在您的问题中,.get()
方法是文档中推荐的方法。虽然直接调用属性会节省几纳秒,但你不应该这样做。
原因是它可能会鼓励有人阅读您的代码,使用相同的方法来设置属性:model.attributes.foo = 'blah';
我可能不必告诉你这会很糟糕。代码可能看似有效,因为您在模型上获得了正确的值,但是您绕过了骨干内置的所有更改跟踪逻辑。如果以这种方式设置属性,则不会触发任何事件。
话虽如此 - 如果没有其他人正在阅读您的代码或更改您的代码但是您,并且您非常关心那些额外的纳秒,并且您知道您将 永远 将来犯这种错误。然后一定要直接使用attributes属性。