2

Backbone.js では、単一の属性の値を取得する方法が 2 つあります。

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

この.get()アプローチはドキュメントで推奨されているものですが、余分な関数呼び出しが含まれるため、おそらく少し遅くなります。

.attributesこのアプローチを使用しない理由はありますか? 予期しない動作を引き起こす場合はありますか?

4

2 に答える 2

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 よりもはるかに読みやすくなっています。そしてそれも短いです。

于 2013-04-10T20:56:07.407 に答える
2

あなたが言及したように、あなたの質問では、.get()アプローチはドキュメントで推奨されているものです。アトリビュートを直接呼び出すと数ナノ秒節約できますが、そうすべきではありません。

その理由は、コードを読んでいる人が同じメソッドを使用して属性を設定するように促す可能性があるためです。model.attributes.foo = 'blah';

これが悪いと言う必要はないかもしれません。モデルで正しい値を取得しているため、コードが機能しているように見えるかもしれませんが、バックボーンに組み込まれているすべての変更追跡ロジックをバイパスしています。そのように属性を設定すると、イベントはトリガーされません。

そうは言っても、あなた以外の誰もあなたのコードを読んだり、コードを変更したりしていない場合、そしてあなたがそれらの余分なナノ秒それほど気にし、将来そのようなタイプの間違いを決して犯さないことがわかっている場合. 次に、属性プロパティを直接使用してください。

于 2013-04-10T17:39:31.830 に答える